UITextField в UIActionSheet, вызывая только некоторые методы делегата - PullRequest
1 голос
/ 10 февраля 2011

Приведенный ниже код показывает, что, когда пользователь выполняет длинный жест нажатия на ячейку табличного представления, запускается UIActionSheet с UITextField внутри нее. При нажатии UITextField клавиатура запускается, и textFieldShouldBeginEditing и textFieldDidBeginEditing вызывается, но текстовое поле не принимает нажатия клавиш.

Нажатие клавиши возврата не вызовет методы делегата, но нажатие одной из кнопок UIActionSheet вызовет textFieldShouldEndEditing, а затем textFieldDidEndEditing.

Я устанавливаю textField, чтобы он стал первым респондентом, поэтому я не уверен, почему он не принимает ввод с клавиатуры. Есть предложения?

- (void)longPress:(UILongPressGestureRecognizer *)gesture
{
    // only when gesture was recognized, not when ended
    if (gesture.state == UIGestureRecognizerStateBegan)
    {
        // get affected cell
        SinTableViewCell *cell = (SinTableViewCell *)[gesture view];

        // get indexPath of cell
        NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];

        // do something with this action
        NSLog(@"Long-pressed cell at row %d", indexPath);
        AppDelegate_Shared *appDelegate = (AppDelegate_Shared*)[UIApplication sharedApplication].delegate;

        //setup UITextField for the UIActionSheet
        UITextField *textField    = [[UITextField alloc] initWithFrame:CGRectMake(0, 170, 320, 200)];
        textField.borderStyle     = UITextBorderStyleBezel;
        textField.backgroundColor = UIColorFromRGB(0XFFFFFF);
        textField.text            = @"";
        textField.delegate        = self;

        [textField setKeyboardType:UIKeyboardTypeAlphabet];
        [textField setKeyboardAppearance:UIKeyboardAppearanceAlert];

        //setup UIActionSheet
        UIActionSheet *asheet = [[UIActionSheet alloc] initWithTitle:@"Add Notes" 
                                                            delegate:self 
                                                   cancelButtonTitle:@"Cancel" 
                                              destructiveButtonTitle:nil 
                                                   otherButtonTitles: @"Save", nil];

        [asheet showFromTabBar:appDelegate.tabBarController.tabBar];  
        [asheet setFrame:CGRectMake(0, 100, 320,380)]; 
        [asheet insertSubview:textField atIndex:0];
        //[textField becomeFirstResponder];
        //memory management
        [textField release];
        [asheet release];
    }
}

#pragma mark -
#pragma mark UIActionSheetDelegate
- (void)actionSheet:(UIActionSheet *)actionSheet willDismissWithButtonIndex:(NSInteger)buttonIndex {

}
- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex {

}

#pragma mark -
#pragma mark UITextFieldDelegate
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    NSLog(@"textFieldShouldBeginEditing");
    return YES;
}     
- (void)textFieldDidBeginEditing:(UITextField *)textField {
    NSLog(@"textFieldDidBeginEditing");
    [textField becomeFirstResponder];
}   
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
    NSLog(@"textFieldShouldEndEditing");
    return YES;
}

//should save the notes value here, I think
- (void)textFieldDidEndEditing:(UITextField *)textField {
    NSLog(@"textFieldDidEndEditing");
    [textField resignFirstResponder];
}

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    return YES;
}

- (BOOL)textFieldShouldClear:(UITextField *)textField {
    NSLog(@"textFieldShouldClearEditing");
    return YES;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    NSLog(@"in textFieldShouldReturn");
    return YES;
}

Ответы [ 2 ]

1 голос
/ 11 апреля 2011

Ваш вопрос немного устарел, но не помечен как ответивший, поэтому, если он будет полезен вам или другим зрителям, я отправлю свое решение из своего собственного SO вопроса . Я начал с той же проблемы, что и вы, и закончил тем, что UIActionSheet действительно поглощает некоторые важные события, которые необходимы для правильной работы клавиатуры. Мой связанный размещенный код, к сожалению, работает только в портретной ориентации, в любом случае это делает.

0 голосов
/ 10 февраля 2011

Является ли UITextFieldDelegate и UIActionSheetDelegate в вашем заголовке?

Если нет, могут возникнуть проблемы при установке textfield.delegate на self

...