2

Это мое первое сообщение в StackOverflow, и я также новичок в Xcode и Objective-C. Я читал о делегатах, и я также экспериментировал с кодом других людей. Тем не менее, я хотел посмотреть, могу ли я создать что-то самостоятельно, которое использует делегатов без помощи копирования чужого кода.Как обновить UILabel, поскольку текст набирается в UITextField

То, что я пытаюсь понять, чтобы понять делегатов, заключается в том, чтобы получить делегат UITextField для обновления метки каждый раз, когда пользователь вводит ключ на клавиатуре.

Я создал файл xib и подключил TextField к UITextField * myTextField и метке UILabel * myLabel в моем файле .h.

Я также добавил к файлу .h моего класса ViewController.

Однако я не уверен, какой метод делегата использовать, поскольку дополнительные опции, которые я могу использовать, как указано в UITextFieldDelegate.h, как представляется, могут обновляться после завершения редактирования. Также я не уверен, должен ли я поместить метод AppDelegate в файл .h, связанный с моим xib или файлом AppDelegate.h.

Я был бы признателен за любую помощь в этом направлении.

ответ

1

Так что если у вас есть UITextField MyTextField, связанный с вашим объектом СИБ IB TextField, и UILabel MyLabel, связанный с вашими бобами IB Ярлык, и вы указали, что ваше текстовое поле указывает на владельца вашего файла, а затем попробуйте, чтобы узнать, помогает ли он.

Я просто набрал это быстро, и я не тестировал его, поэтому сначала проверьте его на наличие ошибок.

// 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; 
} 
+0

Спасибо. Да, это сработало. – user1363388

+0

Это обходное решение, в то время как вы должны использовать протокол 'UITextInput' –

+0

, есть ли версия этого приложения для applescript objc? спасибо –

6

Вы можете добавить свой UIViewController как уведомление наблюдатель на UITextField так:

[textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; 

- (void)textFieldDidChange:(UITextField *)textField { 
} 
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 
    }} 
+0

В принципе вам нужно действие и соответствующий ему протокол , если вы хотите установить значение переменной экземпляра, вы можете сделать это в действии didEndEditing, но вы должны реализовать 'code' textFieldDidEndEditing' – Nitrousjp