Как я могу вызвать методы делегата для UITextField в XIB? - PullRequest
0 голосов
/ 16 мая 2018

У меня есть XIB ProfileView, содержащийся в пользовательском UIViewController классе Alarm.ProfileView имеет подпредставление UITextView, и я хочу вызвать UITextView делегировать методы из моего пользовательского класса Alarm вместо ProfileView, потому что вся моя логика относительно текста UITextView находится в моем Alarm учебный класс.Итак, мой вопрос: могу ли я вызвать UITextView делегировать методы из моего Alarm класса, если UITextView является подпредставлением ProfileView?Другими словами, могу ли я установить для делегата UITextView значение Alarm вместо self?

enter image description here

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Да, вы можете.

По коду в Alarm:

func viewDidLoad() {
    super.viewDidLoad()

    // If you have the UITextField @IBOutlet in your Alarm
    textField.delegate = self

    // If it's owned by ProfileView
    profileView.textField.delegate = self
}

Убедитесь, что Alarm соответствует UITextFieldDelegate.


Или с помощью Interface Builder, сначала перетащитеот UITextField до Alarm объекта, подобного этому:

И затем выберите делегат .

enter image description here

0 голосов
/ 16 мая 2018
  • Подключите и сделайте UITextView в качестве публичной собственности ProfileView

    @interface ProfileView : UIView
    @property (weak, nonatomic) IBOutlet UITextView *textView;
    @end
    
  • В своем классе Alarm установите self.profileView.textView.delegate = self и реализуйте необходимые функции или, если profileView не является свойством Alarm, установите делегат после его инициализации.

    @interface Alert : UIViewController <UITextViewDelegate>
    
    @property (nonatomic, strong) ProfileView* profileView;
    
    @end
    
    // In |viewDidLoad| or anywhere after you initialize |_profileView|
    self.profileView.textView.delegate = self;
    
...