0

我在这里描述了同样的问题How to add text field to inputAccessoryView and make the textView first responder和 Tom 发布的解决方案运行良好。现在我的新问题是 UITextField 和 UITextView 使用相同的 inputAccessoryView 并且还没有找到区分哪个是调用者的方法。

这是一个小代码:

@property (unsafe_unretained, nonatomic) IBOutlet UITextField *titleField;
@property (unsafe_unretained, nonatomic) IBOutlet UITextView *reviewField;

在 viewDidLoad 中:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.titleField.inputAccessoryView = self.accessorView;
    self.reviewField.inputAccessoryView = self.accessorView;
    self.accessorView.delegate = self;

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(changeFirstResponder:)
                                                 name:UIKeyboardDidShowNotification
                                               object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(fillAccessorView:)
                                                 name:UIKeyboardWillShowNotification
                                               object:nil];
}

和两个处理程序

- (void) fillAccessorView:(NSNotification *) notification
{
    self.accessorView.titleLabel.text = @"MY Title";
}

- (void) changeFirstResponder:(NSNotification *) notification
{
    [self.accessorView.textInputField becomeFirstResponder];

}

我已经尝试过这样

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(changeFirstResponder:)
                                             name:UIKeyboardDidShowNotification
                                           object:self.titleField];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(fillAccessorView:)
                                             name:UIKeyboardWillShowNotification
                                           object:self.titleField];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(changeFirstResponder:)
                                             name:UIKeyboardDidShowNotification
                                           object:self.reviewField];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(fillAccessorView:)
                                             name:UIKeyboardWillShowNotification
                                           object:self.reviewField];

这样处理程序从未调用过:/

有谁知道该怎么做?

4

1 回答 1

0

不幸的是,这些通知有一个 nil 对象参数,所以这就是为什么您尝试使用对象参数没有奏效的原因。除了使用这些通知之外,您还可以使用文本字段和文本视图委托方法(textFieldShouldBeginEditing 或 textFieldDidBeginEditing,以及它们的文本视图等效项)。这两个委托方法都在收到键盘通知之前调用。请记住让您的班级成为文本字段和文本视图的代表。

于 2013-01-09T17:50:46.897 回答