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;
}