在我正在进行的一个项目中,我必须编写一个 UIAlert 帮助程序模块,它可以在我的 iOS 应用程序中到处显示弹出窗口。弹出窗口被编写为类函数,我可以在代码中的任何地方简单地调用它们(类是静态的,所有函数也是静态的)。
我现在遇到一个非常奇怪的错误,如果您关闭一次警报,然后再次打开它,它的操作将不再起作用(例如,不会调用操作处理程序)。如果您在第一次显示弹出窗口时单击该操作,它确实有效,但是......
这是出现此错误的特定弹出窗口的代码(没有任何其他弹出窗口受到影响):
static func popSkipWalkthrough() {
let alert = UIAlertController(title: "Skip", message: "whatever", preferredStyle: .Alert)
alert.addAction(cancelAction)
alert.addAction(skipWalkthroughAction)
appDelegate.window!.rootViewController!.presentViewController(alert, animated: true, completion: nil)
}
skipWalkthroughAction 定义如下:
static let skipWalkthroughAction = UIAlertAction(title: "Continue", style: .Default, handler: { (action: UIAlertAction!) -> Void in
appDelegate.setWindowViewTo("NavCtrl", navigateTo: false)
CallIn.Settings.didWalkthrough = true
})
cancelAction 定义为:
static let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)
每次您在演练的最后一步按“跳过”按钮时,都会特别显示此弹出窗口...
我已经尝试了一些关于这种行为的原因的线索,我认为这可能与弹出窗口没有真正被释放有关,但我现在完全不确定......
有什么想法吗?
最佳答案
虽然我对这个可重用部分的编码方式有疑问,但可以通过向 skipWalkthroughAction 发送 copy: 消息来解决这个问题。只需做一个:
static func popSkipWalkthrough() {
let alert = UIAlertController(title: "Skip", message: "whatever", preferredStyle: .Alert)
alert.addAction(cancelAction.copy() as! UIAlertAction)
alert.addAction(skipWalkthroughAction.copy() as! UIAlertAction)
appDelegate.window!.rootViewController!.presentViewController(alert, animated: true, completion: nil)
}
这应该可以解决。
您还可以通过将 alert 移动到实例级别来解决此问题。那时您不必发送 copy:。
更好的方法
如果您想要 UIAlertController 的“真正”可重用体验,您最好创建一个 UIViewController 扩展。我的一个项目中有这个:
extension UIViewController {
func showAlertControllerWithTitle(title:String?,message:String?,actions:[UIAlertAction],dismissingActionTitle:String?, dismissBlock:(() -> ())?) -> UIAlertController {
let alertController = UIAlertController(title: title, message: message, preferredStyle: .Alert)
if dismissingActionTitle != nil {
let okAction = UIAlertAction(title: dismissingActionTitle, style: .Default) { (action) -> Void in
dismissBlock?()
alertController.dismissViewControllerAnimated(true, completion:nil)
}
alertController.addAction(okAction)
}
for action in actions {
alertController.addAction(action)
}
self.presentViewController(alertController, animated: true, completion:nil)
return alertController
}
}
关于ios - UIAlertController - 如果第一次解除警报,则不会执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35291504/
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val
设置:狂欢ruby1.9.2高线(1.6.13)描述:我已经相当习惯在其他一些项目中使用highline,但已经有几个月没有使用它了。现在,在Ruby1.9.2上全新安装时,它似乎不允许在同一行回答提示。所以以前我会看到类似的东西:require"highline/import"ask"Whatisyourfavoritecolor?"并得到:Whatisyourfavoritecolor?|现在我看到类似的东西:Whatisyourfavoritecolor?|竖线(|)符号是我的终端光标。知道为什么会发生这种变化吗? 最佳答案
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
我有一个这样的哈希数组:[{:foo=>2,:date=>Sat,01Sep2014},{:foo2=>2,:date=>Sat,02Sep2014},{:foo3=>3,:date=>Sat,01Sep2014},{:foo4=>4,:date=>Sat,03Sep2014},{:foo5=>5,:date=>Sat,02Sep2014}]如果:date相同,我想合并哈希值。我对上面数组的期望是:[{:foo=>2,:foo3=>3,:date=>Sat,01Sep2014},{:foo2=>2,:foo5=>5:date=>Sat,02Sep2014},{:foo4=>4,:dat
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
如果我使用ruby版本2.5.1和Rails版本2.3.18会怎样?我有基于rails2.3.18和ruby1.9.2p320构建的rails应用程序,我只想升级ruby的版本,而不是rails,这可能吗?我必须面对哪些挑战? 最佳答案 GitHub维护apublicfork它有针对旧Rails版本的分支,有各种变化,它们一直在运行。有一段时间,他们在较新的Ruby版本上运行较旧的Rails版本,而不是最初支持的版本,因此您可能会发现一些关于需要向后移植的有用提示。不过,他们现在已经有几年没有使用2.3了,所以充其量只能让更
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的