Iphone 当添加为UIAlertView的子视图时,UITextView不会重新调整

Iphone 当添加为UIAlertView的子视图时,UITextView不会重新调整,iphone,uitextview,uialertview,uikeyboard,resignfirstresponder,Iphone,Uitextview,Uialertview,Uikeyboard,Resignfirstresponder,我添加了UIExtView作为UIAlertView的子视图,我添加了带有完成按钮(使用UIBarButtonItem)的UIToolBar作为inputAccessoryView以允许用户退出键盘”。它在iOS6.0中运行良好。而不是在iOS5.0中 为了再次确认我自己,我做了一个示例项目,并在两个iOS版本中检查了相同的问题,问题是相同的 这是密码,这让我很困惑 -(UIToolbar *)accessoryView { if (!accessoryView) { a

我添加了
UIExtView
作为
UIAlertView
的子视图,我添加了带有完成按钮(使用
UIBarButtonItem
)的
UIToolBar
作为
inputAccessoryView
以允许用户退出键盘”。它在iOS6.0中运行良好。而不是在iOS5.0中

为了再次确认我自己,我做了一个示例项目,并在两个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
}
这是我正在做的步骤列表

  • 使用Textview显示警报
  • 聚焦到文本视图
  • 点击完成按钮退出文本视图
  • 不是在iOS5辞职,而是在iOS6辞职

  • 有什么想法吗?出什么问题了?

    实际上,您的textview并不是第一个响应者。第一个响应者是您的alertView

    所以你应该试试这个

    [textField resignFirstResponder];
    [alertView resignFirstResponder];
    

    要使用此代码,您必须在.h文件中声明您的alertView对象。

    我已经解决了它,正如@iOS Developer给出的解决方案,但由于我有太多的
    UIAlertView
    对象要处理,我在委托中添加了
    UIAlertView
    属性,并将其与我的alertView对象分配为如下所示

    -(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];
        }
    }
    
    - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
          [alertView textFieldAtIndex:0].text;
    }
    
    在AppDelegate.m文件中

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

    虽然有点晚了,但我想知道您的代码在iOS7中不起作用,或者从iOS7开始不起作用
    UIAlertView
    不允许添加任何子视图(当您将
    uiExtView
    添加为
    UIAlertView
    的子视图时)

    如果您的要求不是强制使用
    UITextView
    ,那么您可以使用
    UIAlertView
    ,并在警报中使用默认文本字段进行以下配置

    UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Title"
                                                              message:@"Message"
                                                             delegate:self
                                                    cancelButtonTitle:@"Cancel"
                                                    otherButtonTitles:@"Ok", nil];
    
            [message setAlertViewStyle:UIAlertViewStylePlainTextInput];
    [message show];
    
    您可以在
    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];
        }
    }
    
    - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
          [alertView textFieldAtIndex:0].text;
    }
    

    到底发生了什么?你是想说移除警报键盘后不会隐藏。或者您想在出现警报时隐藏键盘?请检查更新的问题。我已经添加了我正在执行的步骤列表。请参阅我的答案这可能会帮助您………谢谢您的答案。它起作用了!但是问题是有
    UIAlertView
    的对象,我已经编写了很多
    UIAlertView
    ,所以现在我不能考虑头文件,它在iOS6.0中工作,我能得到特定警报的对象吗+1作为您的答案。无需在标题中声明所有警报。只需在头文件中声明一个带有文本的alertView。谢谢您的回答。现在我正在使用自定义警报执行所有操作。:-)如果我想要文本视图而不是文本字段,该怎么办?您不能使用TextView而不是Textfield,因为它是UIAlertView的默认配置,如果您想使用TextView,请查找一些自定义警报视图或创建自己的警报视图。