当前位置:  开发笔记 > 前端 > 正文

iPhone上的UIAlertView中的UITextField - 如何使其响应?

如何解决《iPhone上的UIAlertView中的UITextField-如何使其响应?》经验,为你挑选了4个好方法。

我将UITextField放入UIAlertView并将其向上移动,以便键盘不会使用以下代码覆盖它:

[dialog setDelegate:self];
[dialog setTitle:@"Enter Name"];
[dialog addButtonWithTitle:@"Cancel"];
[dialog addButtonWithTitle:@"OK"];
UITextField * nameField = [[UITextField alloc] initWithFrame:CGRectMake(20.0, 45.0, 245.0, 25.0)];
[nameField setBackgroundColor:[UIColor whiteColor]];
[dialog addSubview:nameField];
CGAffineTransform moveUp = CGAffineTransformMakeTranslation(0.0, 100.0);
[dialog setTransform: moveUp];
[dialog show];

我还有以下代码来处理警报视图:

- (void) alertView:(UIAlertView *)alert clickedButtonAtIndex:(NSInteger)buttonIndex{    
    NSLog(@"%d", (int) buttonIndex);
    if (buttonIndex == 1) { // OK pushed
        NSLog([alert textField].text); // does not log anything
    } else {
        // Cancel pushed
}}

我还有一个UIAlertViewExtended.h文件,其中包含:

@class UITextField, UILabel;

@interface UIAlertView(Extended)

-(UITextField *)textField;

@end

我的问题是如何获取用户输入的文本以及如何解除键盘?

谢谢,本



1> chunkyguy..:

任何支持iOS 5.0以及ARC的人都可以设置这个直接的alertViewStyle属性:

-(void)showAlertWithTextField{
    UIAlertView* dialog = [[UIAlertView alloc] initWithTitle:@"Enter Name" message:@"" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Add", nil];    
    [dialog setAlertViewStyle:UIAlertViewStylePlainTextInput];

    // Change keyboard type
    [[dialog textFieldAtIndex:0] setKeyboardType:UIKeyboardTypeNumberPad];
    [dialog show];
}

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    if (buttonIndex == 1)
        NSLog(@"%@",[[alertView textFieldAtIndex:0]text]);
}



2> user21293..:

对于那些可能关心的人,这是一个有效的解决方案:

UIAlertView* dialog = [[UIAlertView alloc] init];
[dialog setDelegate:self];
[dialog setTitle:@"Enter Name"];
[dialog setMessage:@" "];
[dialog addButtonWithTitle:@"Cancel"];
[dialog addButtonWithTitle:@"OK"];

nameField = [[UITextField alloc] initWithFrame:CGRectMake(20.0, 45.0, 245.0, 25.0)];
[nameField setBackgroundColor:[UIColor whiteColor]];
[dialog addSubview:nameField];
CGAffineTransform moveUp = CGAffineTransformMakeTranslation(0.0, 100.0);
[dialog setTransform: moveUp];
[dialog show];
[dialog release];
[nameField release];

确保你已经创建了UITextField*nameField; 在.h文件中,您可以通过执行以下操作获取用户键入的文本:inputText = [nameField text];

在 - (void)alertView:(UIAlertView*)alert clickedButtonAtIndex:(NSInteger)buttonIndex方法.

重要提示: 对于iOS 4.0+,它CGAffineTransform会自动完成,因此如果您的目标只是4.0+,则可以将其删除.否则,您需要检查您所在的操作系统并相应地处理它.


嘿! 你为什么要保留变量`dialog`?不是你已经分配了吗?我可能错了,但似乎你正在以这种方式泄漏一个物体.经验法则是,如果你分配一个对象,那么你必须释放它,因为它已经有一个保留计数为1.

3> Adam Ernst..:

值得一试

http://junecloud.com/journal/code/displaying-a-password-or-text-entry-prompt-on-the-iphone.html?cmd=success#comment3870

获得完整而全面的解决方案.


伟大的代码.我建议将文本字段保存在实例变量中.然后,您不需要实现文本字段委托,您可以让它在`alertView:willDismissWithButtonIndex:`中重新签名第一个响应者,以摆脱"wait_fences:无法接收回复:10004003"控制台消息.

4> squelart..:

找到文本字段而不保留对其的明确引用的简单方法是设置其标记:

nameField.tag = ALERTVIEW_NAMEFIELD;

确保它与0和UIView您可能拥有的其他对象标签不同,包括父对话框!

然后在alertView:clickedButtonAtIndex:处理程序中,您可以通过以下方式检索文本字段:

UITextField *nameField = (UITextField *)[alertView viewWithTag:ALERTVIEW_NAMEFIELD];

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有