如何在 XIB 中调用 UITextField 的委托方法?
Posted
技术标签:
【中文标题】如何在 XIB 中调用 UITextField 的委托方法?【英文标题】:How do I call delegate methods for a UITextField within a XIB? 【发布时间】:2018-05-16 00:59:34 【问题描述】:我有一个 XIB ProfileView
包含在自定义 UIViewController
类 Alarm
中。 ProfileView
有一个子视图UITextView
,我想从我的自定义类Alarm
中调用UITextView
委托方法而不是ProfileView
,因为我关于UITextView
文本的所有逻辑都在我的@987654332 中@ 班级。所以我的问题是:如果UITextView
是ProfileView
的子视图,我可以从我的Alarm
类中调用UITextView
委托方法吗?换句话说,我可以将UITextView
委托设置为Alarm
而不是self
?
【问题讨论】:
你是说你想要 UITextField 的 两个 代表吗? “访问委托方法”是什么意思?委托方法由请求对象调用,而不是您自己“访问”的东西。一个对象应该有一个唯一的委托,所以如果您希望多个对象被通知 UITextField 中的某些更改,那么注册通知可能更合适?不确定您要完成什么,所以也许您可以为您的问题添加更多上下文。 @christopherdrum 感谢您增加清晰度。我已经编辑了我的问题。希望我在问什么是有道理的。我只想从Alarm
而不是ProfileView
调用我的UITextView
委托方法。
@AustinBerenyi 对不起,但我能知道为什么我的答案不能被接受为正确答案吗?您的问题具有objective-c 标签,并且您将Swift 答案标记为正确答案。还有一个,我的答案是较早的答案。公平点!
@trungduc 很抱歉这个错误。您的答案应该首先被标记为正确答案。感谢您的帮助!
【参考方案1】:
连接并将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;
【讨论】:
【参考方案2】:是的,你可以。
通过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
对象:
然后选择委托。
【讨论】:
以上是关于如何在 XIB 中调用 UITextField 的委托方法?的主要内容,如果未能解决你的问题,请参考以下文章
在自定义单元格(xib)中滚动时,UITextField 中的文本消失
当点击 UITextField 时,加载 nib 文件以充当自定义键盘
如何在 iphone 中增加 UITextField 的高度