几天来我一直在寻找一个简单的答案,但我似乎找不到。
如果键盘上存在辅助 View ,我想查找并替换附加到我的 UIWebView 的键盘的 inputAccessoryView。我想替换它,这样我就可以拥有自己的 Prev 和 Next 按钮。快速完成是一个优势。
听起来很简单,但并不明显。
最佳答案
import UIKit
extension UIViewController {
func addNewAccessoryView(oldAccessoryView:UIView)
{
var frame = oldAccessoryView.frame;
var newAccessoryView = UIView(frame:frame)
newAccessoryView.backgroundColor = UIColor.lightGrayColor()
let fn = ".HelveticaNeueInterface-Bold"
var doneButton = UIButton(frame:CGRectMake(frame.size.width-80,6,100,30))
doneButton.setTitle("Done", forState: UIControlState.Normal)
doneButton.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal)
doneButton.titleLabel!.font = UIFont(name: fn, size: 15)
doneButton.addTarget(self, action: "buttonAccessoryDoneAction:", forControlEvents: UIControlEvents.TouchUpInside)
var prevButton = UIButton(frame:CGRectMake(2,6,50,30))
prevButton.setTitle("<", forState: UIControlState.Normal)
prevButton.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal)
prevButton.titleLabel!.font = UIFont(name: fn, size: 15)
prevButton.addTarget(self, action: "buttonAccessoryPrevAction:", forControlEvents: UIControlEvents.TouchUpInside)
var nextButton = UIButton(frame:CGRectMake(35,6,50,30))
nextButton.setTitle(">", forState: UIControlState.Normal)
nextButton.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal)
nextButton.titleLabel!.font = UIFont(name: fn, size: 15)
nextButton.addTarget(self, action: "buttonAccessoryNextAction:", forControlEvents: UIControlEvents.TouchUpInside)
newAccessoryView.addSubview(prevButton);
newAccessoryView.addSubview(nextButton);
newAccessoryView.addSubview(doneButton);
oldAccessoryView.addSubview(newAccessoryView)
}
func traverseSubViews(vw:UIView) -> UIView
{
if (vw.description.hasPrefix("<UIWebFormAccessory")) {
return vw
}
for(var i = 0 ; i < vw.subviews.count; i++) {
var subview = vw.subviews[i] as UIView;
if (subview.subviews.count > 0) {
var subvw = self.traverseSubViews(subview)
if (subvw.description.hasPrefix("<UIWebFormAccessory")) {
return subvw
}
}
}
return UIView()
}
func replaceKeyboardInputAccessoryView()
{
// locate accessory view
let windowCount = UIApplication.sharedApplication().windows.count
if (windowCount < 2) {
return;
}
let tempWindow:UIWindow = UIApplication.sharedApplication().windows[1] as UIWindow
var accessoryView:UIView = traverseSubViews(tempWindow)
if (accessoryView.description.hasPrefix("<UIWebFormAccessory")) {
// Found the inputAccessoryView UIView
if (accessoryView.subviews.count > 0) {
self.addNewAccessoryView(accessoryView)
}
}
}
// Override these in your UIViewController
func buttonAccessoryNextAction(sender:UIButton!)
{
println("Next Clicked")
}
func buttonAccessoryPrevAction(sender:UIButton!)
{
println("Prev Clicked")
}
func buttonAccessoryDoneAction(sender:UIButton!)
{
println("Done Clicked")
}
}
然后在您的 UIViewController 中设置一个 Notification 当键盘出现时。您可以在 viewDidAppear() 中执行此操作。
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardDidShow:"), name:UIKeyboardDidShowNotification, object: nil);
并从您的 keyboardDidShow 处理程序中调用 UIViewController 的 replaceKeyboardInputAccessoryView 方法。
func keyboardDidShow(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() {
self.replaceKeyboardInputAccessoryView()
}
}
关于ios - 在 Swift 的 UIWebView 中替换键盘的 inputAccessoryView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30312525/
在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg
我正在尝试在Ruby中制作一个cli应用程序,它接受一个给定的数组,然后将其显示为一个列表,我可以使用箭头键浏览它。我觉得我已经在Ruby中看到一个库已经这样做了,但我记不起它的名字了。我正在尝试对soundcloud2000中的代码进行逆向工程做类似的事情,但他的代码与SoundcloudAPI的使用紧密耦合。我知道cursesgem,我正在考虑更抽象的东西。广告有没有人见过可以做到这一点的库或一些概念证明的Ruby代码可以做到这一点? 最佳答案 我不知道这是否是您正在寻找的,但也许您可以使用我的想法。由于我没有关于您要完成的工作
我正在尝试用ruby中的gsub函数替换字符串中的某些单词,但有时效果很好,在某些情况下会出现此错误?这种格式有什么问题吗NoMethodError(undefinedmethod`gsub!'fornil:NilClass):模型.rbclassTest"replacethisID1",WAY=>"replacethisID2andID3",DELTA=>"replacethisID4"}end另一个模型.rbclassCheck 最佳答案 啊,我找到了!gsub!是一个非常奇怪的方法。首先,它替换了字符串,所以它实际上修改了
这里有一个很好的答案解释了如何在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返回它复制的字节数,但是当我还没有下
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
两个gsub产生不同的结果。谁能解释一下为什么?代码也可在https://gist.github.com/franklsf95/6c0f8938f28706b5644d获得.ver=9999str="\tCFBundleDevelopmentRegion\n\ten\n\tCFBundleVersion\n\t0.1.190\n\tAppID\n\t000000000000000"putsstr.gsub/(CFBundleVersion\n\t.*\.).*()/,"#{$1}#{ver}#{$2}"puts'--------'putsstr.gsub/(CFBundleVersio
假设我在Store的模型中有这个非常简单的方法:defgeocode_addressloc=Store.geocode(address)self.lat=loc.latself.lng=loc.lngend如果我想编写一些不受地理编码服务影响的测试脚本,这些脚本可能已关闭、有限制或取决于我的互联网连接,我该如何模拟地理编码服务?如果我可以将地理编码对象传递到该方法中,那将很容易,但我不知道在这种情况下该怎么做。谢谢!特里斯坦 最佳答案 使用内置模拟和stub的rspecs,你可以做这样的事情:setupdo@subject=MyCl
我有很多这样的文档:foo_1foo_2foo_3bar_1foo_4...我想通过获取foo_[X]的所有实例并将它们中的每一个替换为foo_[X+1]来转换它们。在这个例子中:foo_2foo_3foo_4bar_1foo_5...我可以用gsub和一个block来做到这一点吗?如果不是,最干净的方法是什么?我真的在寻找一个优雅的解决方案,因为我总是可以暴力破解它,但我觉得有一些正则表达式技巧值得学习。 最佳答案 我(完全)不懂Ruby,但类似这样的东西应该可以工作:"foo_1foo_2".gsub(/(foo_)(\d+)/
我有以下内容:text.gsub(/(lower)(upper)/,'\1\2')我可以将\2替换为大写吗?类似于:sed-e's/\(abc\)/\U\1/'这在Ruby中可行吗? 最佳答案 查看gsub文档:str.gsub(模式){|匹配|block}→new_str在block形式中,当前匹配字符串作为参数传入,$1、$2、$`、$&、$'等变量将被适当设置。block返回的值将替换为每次调用的匹配项。"alowerupperb".gsub(/(lower)(upper)/){|s|$1+""+$2.upcase}