我正在将 UITextField 添加到 UIAlertController,它显示为 AlertView。在关闭 UIAlertController 之前,我想验证 UITextField 的输入。基于验证,我想关闭 UIAlertController 或不。但是我不知道如何在按下按钮时阻止 UIAlertController 的解除操作。有没有人解决了这个问题或从哪里开始的任何想法?我去了谷歌但没有运气:/谢谢!
最佳答案
您是对的:如果用户可以点击提醒中的按钮,提醒将被取消。所以你想阻止用户点击按钮!这只是禁用 UIAlertAction 按钮的问题。如果警报操作被禁用,用户将无法点击它来关闭。
要将其与文本字段验证相结合,请使用文本字段委托(delegate)方法或操作方法(在创建文本字段时在文本字段的配置处理程序中配置)根据文本具有(或不具有)的内容适本地启用/禁用 UIAlertActions ) 被输入。
这是一个例子。我们创建了这样的文本字段:
alert.addTextFieldWithConfigurationHandler {
(tf:UITextField!) in
tf.addTarget(self, action: "textChanged:", forControlEvents: .EditingChanged)
}
我们有一个 Cancel Action 和一个 OK Action ,我们将 OK Action 带入了禁用的世界:
(alert.actions[1] as UIAlertAction).enabled = false
随后,除非文本字段中有一些实际文本,否则用户无法点击确定:
func textChanged(sender:AnyObject) {
let tf = sender as UITextField
var resp : UIResponder = tf
while !(resp is UIAlertController) { resp = resp.nextResponder() }
let alert = resp as UIAlertController
(alert.actions[1] as UIAlertAction).enabled = (tf.text != "")
}
编辑这是上述代码的当前(Swift 3.0.1 及更高版本)版本:
alert.addTextField { tf in
tf.addTarget(self, action: #selector(self.textChanged), for: .editingChanged)
}
和
alert.actions[1].isEnabled = false
和
@objc func textChanged(_ sender: Any) {
let tf = sender as! UITextField
var resp : UIResponder! = tf
while !(resp is UIAlertController) { resp = resp.next }
let alert = resp as! UIAlertController
alert.actions[1].isEnabled = (tf.text != "")
}
关于swift - 防止解除 UIAlertController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25628000/
我有一个ActiveRecord对象,我想在不对模型进行永久验证的情况下阻止它被保存。您过去可以使用errors.add执行类似的操作,但它看起来不再有效了。user=User.lastuser.errors.add:name,"namedoesn'trhymewithorange"user.valid?#=>trueuser.save#=>true或user=User.lastuser.errors.add:base,"myuniqueerror"user.valid?#=>trueuser.save#=>true如何在不修改用户对象模型的情况下防止将用户对象保存在Rails3.2中
Ruby中防止SQL注入(inject)的好方法是什么? 最佳答案 直接使用ruby?使用准备好的语句:require'mysql'db=Mysql.new('localhost','user','password','database')statement=db.prepare"SELECT*FROMtableWHEREfield=?"statement.execute'value'statement.fetchstatement.close 关于ruby-防止SQL注入(inject
我在生产环境(CentOS5.6)中遇到此错误,但在开发环境(Ubuntu11.04)中运行良好。在这两种环境中,该应用程序都使用Ruby1.9.3和Rails3.0.9,并由passenger和nginx提供服务。我的Mechanizegem版本是2.3。未找到代码转换器(UTF-8)此代码的最后一行触发它:mech=Mechanize.newpage=mech.get("http://myurl.com/login.php?login_name=a&password=b")form=page.form_with(:name=>"loginForm")form.field_with(
我有三个模型:User、Comment和Upvote。User-to-Comment是一对多的关系,Comment-to-Upvote是一对多的关系,而User-to-Upvote是一对多的关系。我想做一些类似于在Stackoverflow上进行投票的事情。因此,当您投赞成票/反对票时,箭头将突出显示并保持突出显示状态,即使您在几天/几周后刷新页面或返回页面也是如此。目前我正在这样做:voted?方法在哪里:defself.voted?(user_id,comment_id)find_by(comment_id:comment_id,user_id:user_id).present?e
ruby中的大多数session固定主题都与Rails相关。sinatra中是否存在任何session固定漏洞?在rails中,我们通常建议在分配session之前执行reset_session。我们如何防止sinatra中的session固定? 最佳答案 Sinatra默认使用Rack::Protectiongem来防止许多常见漏洞。您可能对其session劫持保护特别感兴趣。这些是Rack::Protectiongem防止的一些事情:跨站请求伪造真实性token:如果给定的访问token与session中包含的token相匹配,
Method#unbind返回对该方法的UnboundMethod引用,稍后可以使用UnboundMethod#bind将其绑定(bind)到另一个对象.classFooattr_reader:bazdefinitialize(baz)@baz=bazendendclassBardefinitialize(baz)@baz=bazendendf=Foo.new(:test1)g=Foo.new(:test2)h=Bar.new(:test3)f.method(:baz).unbind.bind(g).call#=>:test2f.method(:baz).unbind.bind(h).
Method#unbind和UnboundMethod#bind的目的是什么?据我所知,方法是像procs和lambdas这样的可调用对象,除了方法绑定(bind)到它们的接收者的范围之外:classSomeClassdefa_method;puts"fromSomeClass";endends=SomeClass.news.a_method#=>"fromSomeClass"如果我在SomeClass的上下文中或者我有一个SomeClass的对象,我可以调用a_method。我可以通过将方法提取为Method对象使其成为可调用对象,但在此示例中它仍然绑定(bind)到SomeClas
我有一个ActiveRecord模型对象Foo;它代表一个标准的数据库行。我希望能够显示该对象实例的修改版本。我想重用类本身,因为它已经具有我需要的所有Hook和方面。(例如:我已经有一个显示适当属性的View)。基本上我想克隆模型实例,修改它的一些属性,并将它反馈给调用者(View、测试等)。我不希望这些属性修改返回到数据库中。但是,我确实希望在克隆版本中包含id属性,因为它可以更轻松地处理路由助手。因此,我计划调用ActiveRecord::Base.clone(),手动设置克隆实例的ID,然后对新实例进行适当的属性更改。不过这让我很担心;修改后的实例上的一个save()和我的原始
我想要一个接受散列和可选关键字参数的方法。我尝试定义这样的方法:deffoo_of_thing_plus_amount(thing,amount:10)thing[:foo]+amountend当我使用关键字参数调用此方法时,它按预期工作:my_thing={foo:1,bar:2}foo_of_thing_plus_amount(my_thing,amount:20)#=>21然而,当我省略关键字参数时,散列被吃掉了:foo_of_thing_plus_amount(my_thing)#=>ArgumentError:unknownkeywords:foo,bar如何防止这种情况发生
我在已经转义的文本文件中有一些json:"{\"嘿\":\"那里\"}"当我尝试读取文件时:File.open("\file\path.txt").read它再次转义内容,因此现在是双重转义:"\"{\\\"嘿\\\":\\\"那里\\\"}\""有没有办法防止转义?或者,是否有一种简单的方法可以在读取和转义后对字符串进行转义?谢谢。编辑:答案是有道理的,但我似乎无法解析JSON。irb(main):018:0>json=>"\"{\\\"hey\\\":\\\"there\\\"}\"\n"irb(main):019:0>putsjson"{\"hey\":\"there\"}"=>