这是我对StackOverflow的第一篇文章,我也是Xcode和Objective-C的新手。 我已经阅读了有关代表的内容,并且我还尝试了其他人的代码。但是,我想知道自己是否可以创建一些使用代理而无需复制别人代码的东西。
为了理解代理,我想做的是每当用户在键盘上键入一个键时,让UITextField委托更新标签。
我创建了一个xib文件,并在我的.h文件中将TextField连接到UITextField * myTextField和Label UILabel * myLabel。
我还添加了ViewController类的.h文件。
但是,我不确定使用什么委托方法,因为我可以使用UITextFieldDelegate.h中列出的可选项似乎只能在编辑完成后更新。另外我不确定是否应该将AppDelegate方法放在与我的xib或AppDelegate.h文件关联的.h文件中。
如果有任何帮助,我将不胜感激。
答案 0 :(得分:6)
你可以在UITextField上添加你的UIViewController作为通知观察者,如下所示:
[textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
- (void)textFieldDidChange:(UITextField *)textField {
}
答案 1 :(得分:1)
因此,如果您有一个UITextField myTextField链接到您的nib IB TextField对象,并且UILabel myLabel链接到您的nib IB Label对象,并且您已将Textfield指向您的文件所有者,那么请尝试查看它是否有帮助。
我只是快速输入,我没有测试,所以先检查一下它是否错误。
// ViewController.h
@interface ViewController : UIViewController <UITextFieldDelegate> {
IBOutlet UILabel *myLabel;
IBOutlet UITextField *myTextField;
}
@property (nonatomic, retain) UILabel *myLabel;
@property (nonatomic, retain) UITextField *myTextField;
@end
// ViewController.m
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
myLabel.text = myTextField.text;
return YES;
}
答案 2 :(得分:0)
import UIKit
class ViewController: UIViewController , UITextFieldDelegate {
// Create a label Outlet
@IBOutlet weak var label: UILabel!
// TextField Outlet
@IBOutlet weak var textField: UITextField!
// Select the textfield and in connection inspector drag a action from editing changed to the source code
@IBAction func changed(_ sender: Any) {
// Set text to label
label.text = textField.text
}
override func viewDidLoad() {
super.viewDidLoad()
//Delegate to self
textField.delegate = self
textField.autocorrectionType = .no
}
// Implement the protocols
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
return true
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}}