UITextView не отвечает на другие аксессуары UITextView Посмотреть iPhone?

Я работаю над приложением для iPhone на основе сообщений. У меня есть экран, чтобы ответить на полученное сообщение. Этот экран содержит два UITextViews, как bottomTextView и topTextView.

topTextView добавляется как представление InputAccessory для bottomTextView.

Когда пользователь входит в экран topTextViewдолжен стать первым ответчиком. Он показывает, но курсор не помещается в topTextView. Курсор находится в текстовом представлении bottomTextView, Как заставить topTextView стать первым респондентом с курсором на месте?

Вот код, который я пробовал:

- (void)viewDidLoad
{
    [super viewDidLoad];            
    bottomBarView = [[UIView alloc] initWithFrame:CGRectMake(0, 380, 320, 40)];
    bottomBarViewImage.image = [UIImage imageNamed: @"toolbarbg~iphone.png"];
    [bottomBarView addSubview: bottomBarViewImage];
    [self.view addSubview: bottomBarView];

    bottomTextView = [[UITextView alloc] initWithFrame:CGRectMake(35, 7.5, 210, 25)];
    bottomTextView.delegate = self;
    bottomTextView.backgroundColor = [UIColor clearColor];
    bottomTextView.font = [UIFont fontWithName:@"Helvetica" size:14];
    bottomTextView.scrollEnabled = NO;
    [bottomBarView addSubview: bottomTextView];

    topBarView = [[UIView alloc] initWithFrame:CGRectMake(0, 380, 320, 40)];
    topBarViewImage.image = [UIImage imageNamed: @"toolbarbg~iphone.png"];
    [topBarView addSubview: topBarViewImage];

    topTextView = [[UITextView alloc] initWithFrame:CGRectMake(35, 7.5, 210, 25)];
    topTextView.delegate = self;
    topTextView.backgroundColor = [UIColor clearColor];
    topTextView.font = [UIFont fontWithName:@"Helvetica" size:14];
    topTextView.scrollEnabled = NO;
    [topBarView addSubview: topTextView];

    [bottomTextView becomeFirstResponder];
    [bottomTextView setInputAccessoryView: topBarView];
}

-(void) textViewDidBeginEditing:(UITextView *)textView
{
    if(textView == bottomTextView)  
    {
        bottomTextView.scrollEnabled = NO;

        [topTextView becomeFirstResponder];
    }
}

topTextView с topBarView показывает, но курсор не находится в topTextView. Не могли бы вы помочь мне решить эту проблему? Заранее спасибо.

1 ответ

Решение

Я думаю, что это может быть потому, что вы звоните [topTextView becomeFirstResponder]; в делегате UITextView textViewDidBeginEditing:, Таким образом, topTextView становится первым респондентом только тогда, когда вы начинаете редактирование bottomTextView, Попробуйте позвонить [topTextView becomeFirstResponder]; вместо [bottomTextView becomeFirstResponder]; в viewDidLoad. Посмотрите, как это происходит. Я не уверен, но becomeFirstResponder не могу позвонить textViewDidBeginEditing:, Не уверен, что это сработает, но стоит попробовать...

РЕДАКТИРОВАТЬ:

Я нашел связанную проблему здесь. Это может быть потому, что textView не появляется сразу, поэтому он не может стать первым респондентом. Вот принятый ответ @Tom:

Мое решение: проверить, когда появилась клавиатура (и, следовательно, вид аксессуара)!

Шаг 1) Прослушайте уведомление (убедитесь, что этот код прочитан, прежде чем вы хотите получить уведомление).

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

Шаг 2) Когда клавиатура появилась, вы можете установить текстовое поле в вашем inputaccessoryview, чтобы стать первым респондентом:

-(void)changeFirstResponder
{
    [textField becomeFirstResponder]; //will return TRUE;
}
Другие вопросы по тегам