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并不是第一个响应者。第一个响应者是您的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,请查找一些自定义警报视图或创建自己的警报视图。