0

のサブビューUITextViewとして追加しました。ユーザーがキーボードを辞退できるように、[完了] ボタンを ( を使用して)UIAlertView追加しました。iOS6.0で問題なく動いています。iOS5.0ではありません。UIToolBarUIBarButtonIteminputAccessoryView

一応ブレイクポイントを入れて確認したところ、自分なりに再確認のため、サンプルプロジェクトを作ってiOS版で確認しましたが、問題は同じでした。

これがコードです、それは私をいじっています、

-(UIToolbar *)accessoryView
{
    if (!accessoryView) {
        accessoryView = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44.0)];

        UIBarButtonItem *btn = [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(hideKeyBoard)];

        UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc]
                                          initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
                                          target:nil
                                          action:nil];

        accessoryView.items = [NSArray arrayWithObjects:flexibleSpace,btn, nil];
        [accessoryView setTintColor:[[UIColor blackColor]colorWithAlphaComponent:0.5]];
    }
    return accessoryView;
}

-(IBAction) showAlertWithTextView: (id) sender
{
    UIAlertView *alert = [[UIAlertView alloc] initWithFrame:CGRectMake(0, 50, 320, 200)];
    alert.title = nil;
    alert.message = nil;
    alert.delegate = self;

    //textview I've added in .h file
    textView = [[UITextView alloc] initWithFrame:alert.bounds];
    textView.text = @"This is a UITextView";
    textView.keyboardAppearance = UIKeyboardAppearanceAlert;
    textView.editable = YES;
    textView.inputAccessoryView = [self accessoryView];
    [alert addSubview:textView];
    [alert show];
}

- (void)hideKeyBoard {
   [textview resignFirstResponder];
   //[self.view endEditing:YES]; //this is also not worked
}

ここに私がやっているステップのリストがあります、

  1. Textview でアラートを表示する
  2. テキストビューにフォーカス
  3. 完了ボタンをタップして、TextView を辞任します。
  4. iOS5 での辞任ではなく、iOS6 での辞任

何か案が?何がうまくいかないのですか?

4

3 に答える 3

1

実際、あなたのテキストビューはファーストレスポンダーではありません。最初のレスポンダーは、alertView です。

だからあなたはこれを試してみるべきです....

[textField resignFirstResponder];
[alertView resignFirstResponder];

このコードを使用するには、.h ファイルで alertView オブジェクトを宣言する必要があります。

于 2013-10-17T12:14:19.577 に答える
0

@iOS Developerが提供するソリューションとして解決しましたが、UIAlertView処理するオブジェクトが非常に多いため、デリゲートにプロパティを追加しUIAlertView、次のようにアラートビューのオブジェクトに割り当てました。

-(void)willPresentAlertView:(UIAlertView *)alertView
{
    //set current alertview
    [[AppDelegate sharedDelegate] setCurrentAlertView:alertView];
}

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    //will remove current alertview reference
    [[AppDelegate sharedDelegate] setNilCurrentAlertView];
}

- (void)hideKeyBoard {

    [textView resignFirstResponder];
    //when need to resign UITextView, get current alertview object
    UIAlertView *alertView = [[AppDelegate sharedDelegate] getCurrentAlertView];
    if(alertView) {
        [alertView resignFirstResponder];
    }
}

AppDelegate.m ファイルでは、

#pragma mark - UIAlertView Resign 
- (void) setCurrentAlertView:(UIAlertView *)alert{
    self.alertObj = alert;
}

- (void) setNilCurrentAlertView {
    self.alertObj = nil;
}

- (UIAlertView *)getCurrentAlertView {
    return (UIAlertView *)self.alertObj;
}
于 2013-10-17T13:57:26.943 に答える
0

少し遅れていますが、iOS7以降ではサブビューの追加が許可されていないため、コードがiOS7で機能しないかどうか疑問に思っています(のサブビューとしてUIAlertView追加しているため)。UITextViewUIAlertView

要件が必須ではない場合は、アラートのデフォルトのテキストフィールドで次の構成をUITextView使用できます。UIAlertView

UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Title"
                                                          message:@"Message"
                                                         delegate:self
                                                cancelButtonTitle:@"Cancel"
                                                otherButtonTitles:@"Ok", nil];

        [message setAlertViewStyle:UIAlertViewStylePlainTextInput];
[message show];

UIAlertViewそして、このようなデリゲートでこのテキストフィールドの値を取得できます。

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
      [alertView textFieldAtIndex:0].text;
}
于 2013-10-23T12:07:53.313 に答える