如何在 XIB 中调用 UITextField 的委托方法?

How do I call delegate methods for a UITextField within a XIB?

我有一个 XIB ProfileView 包含在自定义 UIViewController class Alarm 中。 ProfileView 有一个子视图 UITextView,我想从我的自定义 class Alarm 而不是 ProfileView 调用 UITextView 委托方法,因为我所有的关于 UITextView 文本的逻辑在我的 Alarm class 中。所以我的问题是:如果 UITextViewProfileView 的子视图,我可以从我的 Alarm class 调用 UITextView 委托方法吗?换句话说,我可以将 UITextView 委托设置为 Alarm 而不是 self 吗?

  • 连接并使 UITextView 作为 ProfileView

    的 public 属性
    @interface ProfileView : UIView
    @property (weak, nonatomic) IBOutlet UITextView *textView;
    @end
    
  • 在您的 Alarm class 中,设置 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;
    

是的,你可以。

通过 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 对象,如下所示:

然后select 委托.