Suppose you have an UITextView and you would like to set the delegate of this UITextView.
First thing is that you put this in your header file:
@interface myViewController : UIViewController &l开发者_如何学运维t;UITextViewDelegate> { ...
Then, if you were using IB, you would click the UITextView, and connect the delegate outlet with File's Owner. This would allow you to use commands such as - (BOOL)textViewShouldBeginEditing:(UITextView *)aTextView {
etc.
Now, suppose you wanted to do this programatically. I found this suggestion on here:
textView.delegate = yourDelegateObject;
But I have no idea what 'yourDelegateObject' stands for. In IB, I am connecting with File's Owner... so in code, it would need to be textView.delegate = File's Owner. But what is the File's Owner in this case? myViewController? UIViewController?
I don't really understand the principle, I suppose. Any help would be very much appreciated.
As others have stated, set the delegate
property of the UITextView
. The most common delegate object is self
.
To elaborate on "delegate object": the delegate object is the class (implementing the UITextViewDelegate
protocol) that you want the events to respond to. For example, if you use a class instance instead of self
, the UITextView
will send its events to the implementations of the delegate methods in that class.
Most likely you want to assign a delegate to a current controller object, that is self
:
textView.delegate = self;
yourDelegateObject = self.
you can use
textView.delegate = self;
The delegate is your UIViewController so it's
textView.delegate = self;
Try to put self as delegate:
textView.delegate = self;
So you need to put the function - (BOOL)textViewShouldBeginEditing:(UITextView *)aTextView in the implementation of your controller.
The delegate can be any object, it doesn't have to be the class the textField is created in, though usually it is - whenever this is true you will set it to self, though you can set it to any instanced object that conforms to the protocol (whenever a formal protocol is defined for the object).
Just assign it to self:
textView.delegate = self;
Swift:
textView.delegate = self
Make sure in your class you add UIItextFieldDelegate.
Example: say my class was called Pizza and my textField was called goodEats
class Pizza: UIViewController, UITextFieldDelegate {
//Then set the delegate in viewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
goodEats.delegate = self
}
}
精彩评论