Problem z podklasą UITextView (i UICollectionView) jest taki, że wyznaczonym konstruktorem jest "initWithFrame". Ale w rzeczywistości, gdy ładuje się z storyboardu, zostanie wywołany initWithCoder.Swift: Podklasowanie UITextView lub UICollectionView i właściwe inicjowanie
class BorderedTextView: UITextView {
//will be called
init(coder: NSCoder?){
//constant values here is not an option
super.init(frame: CGRectMake(0,0,100,100), textContainer: nil)
}
//will not be called
init(frame: CGRect, textContainer: NSTextContainer!) {
super.init(frame: frame, textContainer: textContainer)
}
}
W rezultacie nie mogę nazwać żadnego interfejsu dostosowywania kodu na startowych i zapewniają żadnej wartości inicjalizacji zmiennych Swift oprócz domyślnych.
Przypuszczam, że problem można tymczasowo rozwiązać, wyodrębniając rozmiar ramki z "kodera", ale nie znalazłem klucza.
Jakieś pomysły lepsze od wartości ramek kodu?
Spodziewam się, że 'super.init (koder: koder)' działa - i dla podklas UIView lub UILabel to robi (przynajmniej kompilator nie narzeka). Ale dla podklas 'UITextView' nie powiedzie się z komunikatem o błędzie" Musi wywołać oznaczony inicjator ... ". Błąd Swift? –
Możliwe obejście może polegać na inicjalizacji w 'awakeFromNib'. –
Masz rację, wygląda na to, że działa dla UIView (zaktualizowałem pytanie). Ale mam również ten sam problem z UICollectionView, więc problem nie dotyczy tylko UITextView. –