我已将UITextView
添加为UIAlertView
的子视图,我已添加UIToolBar
并使用完成按钮(使用UIBarButtonItem
)作为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
}
以下是我正在做的步骤列表
有什么想法吗?出了什么问题?
答案 0 :(得分:1)
实际上你的textview不是第一个响应者。第一个响应者是你的alertView。
所以你应该试试这个......
[textField resignFirstResponder];
[alertView resignFirstResponder];
要使用此代码,您必须在your.h文件中声明alertView对象
答案 1 :(得分:0)
我已经解决了它,作为@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];
}
}
在AppDelegate.m文件中,
#pragma mark - UIAlertView Resign
- (void) setCurrentAlertView:(UIAlertView *)alert{
self.alertObj = alert;
}
- (void) setNilCurrentAlertView {
self.alertObj = nil;
}
- (UIAlertView *)getCurrentAlertView {
return (UIAlertView *)self.alertObj;
}
答案 2 :(得分:0)
由于时间稍晚但我想知道您的代码无法在iOS7中运行,因为从iOS7开始UIAlertView
不允许添加任何子视图(因为您要添加UITextView
作为子视图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)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
[alertView textFieldAtIndex:0].text;
}