我在我正在构建的应用程序中设置了一些手势识别.其中一个手势是单指单击,它隐藏了屏幕顶部的工具栏.除了一件事之外,效果很好:点击链接会导致工具栏消失.
是否可以检测到链接上没有点按的水龙头?我可以通过查看点击发生的位置来执行此操作,并且只有在html链接上没有发生时才采取操作吗?这是可能的,指向如何确定链接是否被点击的指针将是有帮助的.
根据Octys的建议,我确实尝试将UIWebView包装在UIView中.我正在使用界面构建器,因此我在层次结构中插入了一个视图,并使UIWebView成为新UIView的"子".层次结构现在看起来像这样:

我在视图控制器中为视图添加了一个IBOutlet,并在界面构建器中将其链接起来.
我将手势识别器设置更改为如下所示:
UITapGestureRecognizer* singleTap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleSingleTap:)];
singleTap.numberOfTouchesRequired=1;
singleTap.delegate=self;
[self.UIWebViewContainer addGestureRecognizer:singleTap];
[singleTap release];
Run Code Online (Sandbox Code Playgroud)
此代码驻留在viewDidLoad中.
和以前一样,代码正确地看到单个手指单击,但点击UIWebView中的链接也会导致工具栏消失.如果没有点击链接,我只希望工具栏消失.
有人有什么建议吗?
谢谢.
克里斯
谢谢克里斯
所以我花了一些时间寻找答案,但到目前为止还没有找到任何答案.
我正在尝试从UIInputAccessoryView上的按钮呈现弹出窗口.UIBarButtonItem我想显示popover来自定制视图,所以我可以使用图像.我创建这样的按钮:
buttonImage=[UIImage imageNamed:@"tags.png"];
aButton=[UIButton buttonWithType:UIButtonTypeCustom];
[aButton setImage:buttonImage forState:UIControlStateNormal];
aButton.frame=CGRectMake(0.0, 0.0, buttonImage.size.width, buttonImage.size.height);
UIBarButtonItem* compButton2=[[UIBarButtonItem alloc]initWithCustomView:aButton];
[aButton addTarget:self action:@selector(tagIt:) forControlEvents:UIControlEventTouchUpInside];
Run Code Online (Sandbox Code Playgroud)
当需要显示popover时,我这样做:
CGRect tRect=[((UIButton*)sender) convertRect:((UIButton*)sender).frame toView:self.notePlainText];
NSLog(@"TagIt tRect: %f %f %f %f", tRect.origin.x, tRect.origin.y, tRect.size.width, tRect.size.height);
[self.popoverController presentPopoverFromRect:tRect inView:self.notePlainText permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
Run Code Online (Sandbox Code Playgroud)
但我得到的是:

弹出窗口看起来很好,但是它应该出现在第一个按钮上时出现在第二个按钮上.
然后我发现了这个问题:UIBarButtonItem带有自定义图像而且没有边框,我想,"啊,如果我从barbuttonitem呈现popover而不是这样做,它可能会更好.代码子类UIBarButtonItem为了有一个带图像的按钮,而不是文本,并在调用动作时正确表示barbuttonitem.这允许我使用... presentPopoverFromBarButtonItem ...
所以我在上述问题的第二个答案中尝试了代码,并得到了更好的结果.弹出按钮指向我想要的按钮,但如果设备的方向不是纵向,底部有按钮,则弹出窗口显示方向错误:

最后,我将指出我在程序中的其他地方有其他条形按钮项目,这些项目不在UIInputAccessoryViews中,而且没有问题.它似乎只发生在输入附件视图中.
这就是:隐藏和显示键盘似乎使这项工作更好一点.查看按钮的框架(CGRect)数据,它不会在旋转之间发生变化,除非它被隐藏并带回.这是一个错误吗?
那么..我的问题是:从ui附件视图中嵌入的条形按钮项目呈现弹出窗口的首选,最佳实践方法是什么?
非常感谢你.
cocoa-touch uibarbuttonitem uipopovercontroller uiinterfaceorientation ios
我想要帮助在同一个视图控制器上进行多个Web服务调用.有没有办法可以做到.
谢谢
我继承了NSTextView并重写了keyDown.我想检测命令键组合.例如,Command-L.
Apple的文档表明你只是和修饰符标志(在传递的NSEvent中)与NSEventModifierFlags.CommandKeyMask.
当我这样做时:
let ck = NSEventModifierFlags.CommandKeyMask
Run Code Online (Sandbox Code Playgroud)
我收到一个奇怪的错误:
Binary operator '&' cannot be applied to two 'NSEventModifierFlags' operands.
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?这是swift 2.0,xcode 7.
谢谢!
在XCode中,对于IOS应用程序目标,您可以设置版本号和内部版本号.有没有办法从程序代码中访问这些数字?我在我的应用程序中使用一些用户默认值重复这些数字,我一直认为这是一种更好的方法.
谢谢.
我刚刚开始使用Braintree插件用户界面.客户端是javascript,服务器端是ruby on rails.
我的系统现在非常简单.向用户提供与其相关的发票列表.当发票尚未付款时,他们可以点击"付款"并转到包含Braintree Drop-In UI的新页面.我的问题是:当用户进入"付费"页面时,不会显示插入式用户界面.如果用户重新加载页面,则会显示插入式UI.
为什么?
这是一些相关的代码.这是非常香草,还没有完成 - 只是粗暴对待.
来自发票/ index.html.erb
<td>
<% if invoice.paid %>
<%= 'Paid' %>
<% else %>
<%= link_to 'Pay', payment_path(invoice.id) %>
<% end %>
</td>
Run Code Online (Sandbox Code Playgroud)
来自payments_controller:
class PaymentsController < ApplicationController
skip_before_action :verify_authenticity_token
before_action :set_invoice, only: [:pay, :checkout]
def pay
Braintree::Configuration.environment = :sandbox
Braintree::Configuration.merchant_id = 'merchant id'
Braintree::Configuration.public_key = 'public key'
Braintree::Configuration.private_key = 'private key'
gon.client_token = Braintree::ClientToken.generate()
end
def checkout
nonce = params[:payment_method_nonce]
result = Braintree::Transaction.sale :amount => @invoice.amount, :payment_method_nonce => "nonce-from-the-client"
if …Run Code Online (Sandbox Code Playgroud) 基于对此问题的接受答案,我编写了以下代码:
NSData* somedata;
somedata=[NSKeyedArchiver archivedDataWithRootObject:ts];
Run Code Online (Sandbox Code Playgroud)
其中ts是一个NSAttributedString,它填充了一些文本和一些属性(在本例中为颜色).
当我执行此代码时,我收到此错误:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFType encodeWithCoder:]: unrecognized selector sent to instance 0x6eb5b90'
Run Code Online (Sandbox Code Playgroud)
我是NSCoder竞技场的新手,但上述问题的答案使我觉得这就是我所要做的.是吗?我错过了什么?
编辑:
在这种情况下,无法识别的选择器被发送到NSAttributedString中的颜色属性.当我像这样初始化字符串时:
NSAttributedString *ts = [[NSAttributedString alloc] initWithString:text attributes:self.currentAttributeDictionary];
Run Code Online (Sandbox Code Playgroud)
字典就像这样构建:
self.currentAttributeDictionary=[NSDictionary dictionaryWithObjectsAndKeys:
[self.currentColor CGColor],(NSString*)kCTForegroundColorAttributeName,
nil];
Run Code Online (Sandbox Code Playgroud)
字典的NSLog产生了这个:
New dictionary is: {
CTForegroundColor = "<CGColor 0x6eb5b90> [<CGColorSpace 0x6e968c0> (kCGColorSpaceDeviceRGB)] ( 1 1 0 1 )";}
Run Code Online (Sandbox Code Playgroud)
上面的CGColor的地址与错误消息中的地址匹配.
ios ×4
cocoa-touch ×3
objective-c ×2
braintree ×1
cocoa ×1
iphone ×1
javascript ×1
macos ×1
nscoder ×1
ruby ×1
swift ×1
uiwebview ×1
versioning ×1
web-services ×1
xcode ×1