在 IOS 7 中使用弹出窗口输入文本

Posted

技术标签:

【中文标题】在 IOS 7 中使用弹出窗口输入文本【英文标题】:Entering Text Using Pop-up in IOS 7 【发布时间】:2013-09-26 17:22:49 【问题描述】:

我有一个基于 Xcode 4.6 和 ios 6 构建的应用。我现在正在使用 XCode 5 将其升级到 iOS 7。

我的这段代码在 iOS 6 上完美运行。它的作用是带来一个带有 UITextField 的弹出窗口。用户可以输入他们想要的任何文本并点击确定。我把他们的文字放在 UILabel 中。

我遇到的问题是,在 iOS 7 中,当我打开这个弹出文本框时,它是不可编辑的。触摸它没有任何作用。怎么会?

这是代码和截图

// ************ 
// ENTER TEXT
// ************

-(IBAction)insertText 

    UIAlertView* dialog = [[UIAlertView alloc] initWithTitle:@"Enter Text \n"
                                                     message:@"\n\n Keep it short and sweet"   
                                                    delegate:self 
                                           cancelButtonTitle:@"Cancel"
                                           otherButtonTitles:@"OK", nil];

    nameField = [[UITextField alloc] initWithFrame:CGRectMake(20.0, 45.0, 245.0, 25.0)];
    [nameField setBackgroundColor:[UIColor whiteColor]];
    [dialog addSubview:nameField];
    [dialog show];

【问题讨论】:

供将来参考 - ***.com/questions/6319417/… 【参考方案1】:

使用提供的 API 代替这个 hack。不要添加您自己的文本字段(实际上从未支持过),而是将警报视图的alertViewStyle 设置为UIAlertViewStylePlainTextInput。这将在警报视图中为您提供一个受支持的文本输入字段。

【讨论】:

要完成这个答案:hack 不起作用,因为 iOS 7 支持向 UIAlertView 添加子视图。但 iOS 6 做到了。 UIAlertView 从不支持子视图。它恰好适用于早期版本的 iOS。有区别。 UIAlertView 继承自 UIView。 UIView 支持 addSubview:。所以 UIAlertView 支持 addSubview: 只要不妨碍你使用它。当然,它没有得到官方支持(意思是由 Apple 记录),但它得到了支持。 仅仅因为它基于UIView 并不意味着您应该添加子视图。 Apple 提供的大多数标准 UI 组件不应该添加子视图,并且您永远不应该依赖子视图结构。这些事情发生了变化。坚持使用提供的 API,您就可以避免此类问题。 当新的 iOS 版本出现时,您永远无法完全避免更改代码 - 即使您坚持使用 API。还记得 iOS 6 中我们都必须改变实现显示旋转的方式吗?我们都坚持使用 API,Apple 改变了它。我从来没有说过完全改变 Apple 提供的视图的外观是一个好主意,但在它在技术上有效之前不会被禁止。

以上是关于在 IOS 7 中使用弹出窗口输入文本的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 7 原生登录弹出窗口中处理取消的选择

在 iOS 7 上检查蓝牙是不是在没有系统弹出窗口的情况下打开

如何设置一个按钮以显示弹出窗口的不同结果? (JavaFX)

如何在对话框弹出窗口中保存textview值?

从弹出窗口上的编辑文本中获取文本

带有 UIActivityIndi​​catorView 的 iOS 7 样式弹出窗口/警报视图