小编Chr*_*ris的帖子

使用UIWebView进行手势识别

我在我正在构建的应用程序中设置了一些手势识别.其中一个手势是单指单击,它隐藏了屏幕顶部的工具栏.除了一件事之外,效果很好:点击链接会导致工具栏消失.

是否可以检测到链接上没有点按的水龙头?我可以通过查看点击发生的位置来执行此操作,并且只有在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中的链接也会导致工具栏消失.如果没有点击链接,我只希望工具栏消失.

有人有什么建议吗?

谢谢.

克里斯

谢谢克里斯

cocoa-touch uiwebview uigesturerecognizer ios

11
推荐指数
1
解决办法
1万
查看次数

UIPopoverController出现在错误的位置

所以我花了一些时间寻找答案,但到目前为止还没有找到任何答案.

我正在尝试从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

7
推荐指数
2
解决办法
8285
查看次数

同一个viewController iphone上的多个Web服务调用

我想要帮助在同一个视图控制器上进行多个Web服务调用.有没有办法可以做到.

谢谢

iphone cocoa-touch web-services ios

5
推荐指数
1
解决办法
7603
查看次数

检查keyDown event.modifierFlags会产生错误

我继承了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.

谢谢!

macos cocoa swift

4
推荐指数
1
解决办法
1160
查看次数

是否可以访问XCode的目标版本和内部版本号?

在XCode中,对于IOS应用程序目标,您可以设置版本号和内部版本号.有没有办法从程序代码中访问这些数字?我在我的应用程序中使用一些用户默认值重复这些数字,我一直认为这是一种更好的方法.

谢谢.

versioning xcode objective-c ios

3
推荐指数
1
解决办法
712
查看次数

Braintree Drop-In UI需要重新加载才能正常工作

我刚刚开始使用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)

javascript ruby ruby-on-rails braintree

3
推荐指数
1
解决办法
991
查看次数

编码NSAttributedString会引发错误

基于对此问题的接受答案,我编写了以下代码:

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的地址与错误消息中的地址匹配.

objective-c nsattributedstring nskeyedarchiver nscoder

0
推荐指数
1
解决办法
3014
查看次数