相关疑难解决方法(0)

我的Objective-C单身人物应该是什么样的?

我的单例访问器方法通常是以下的一些变体:

static MyClass *gInstance = NULL;

+ (MyClass *)instance
{
    @synchronized(self)
    {
        if (gInstance == NULL)
            gInstance = [[self alloc] init];
    }

    return(gInstance);
}
Run Code Online (Sandbox Code Playgroud)

我可以做些什么来改善这个?

singleton design-patterns objective-c object-initializers

334
推荐指数
10
解决办法
18万
查看次数

如何忽略触摸事件并将它们传递给另一个子视图的UIControl对象?

我有一个自定义的UIViewController,其UIView占据了屏幕的一角,但大部分都是透明的,除了它的部分有一些按钮和东西.由于该视图上对象的布局,视图的框架可以覆盖其下方的一些按钮.如果他们没有触及任何重要的东西,我希望能够忽略该视图上的任何触摸,但我似乎只能传递实际的触摸事件(touchesEnded/nextResponder的东西).如果我有一个UIButton或类似的东西没有使用touchesEnded,我如何将触摸事件传递给它?

我不能手动找出要调用的按钮选择器,因为这个自定义ViewController可用于许多不同的视图.我基本上需要一种方法来调用它:

[self.nextResponder touchesEnded:touches withEvent:event];

在UIControl类型上也是如此.

cocoa-touch uikit uiresponder ios

64
推荐指数
4
解决办法
6万
查看次数

忽略透明UIControl上的触摸 - 不由添加的操作函数处理

我有一个UIControl包含一些其他控件的自定义.在这些控件之间有空的空间和我UIControl需要透明的背景.

我需要捕捉我的自定义上发生的所有触摸事件,UIControl即使它们恰好发生在其他控件之间(透明区域).我不能使用手势识别器,我需要更多的控制然后他们提供.相反,我想注册触摸处理功能,如下所示:

myControl.addTarget(self, action: "handleTouchDown:event:", forControlEvents: UIControlEvents.TouchDown)
Run Code Online (Sandbox Code Playgroud)

有了这种方法,我会收到与非透明区域相关的触摸,myControl而不是那些发生透明背景的区域.

我尝试覆盖hitTest::point:withEvent我的自定义控件,不检查alpha值.但是hitTest::point:withEvent当触摸发生在透明控制区域时,甚至都没有调用.我用layer自定义替换了我的控件,CALayer并且hitTest在没有结果的情况下覆盖了它(hitTest在该层上似乎根本没有被调用).


更多细节(编辑)

为了提供一个完美的答案(并赢得赏金),您需要做的就是:

  1. 创建简单的应用程序,添加一个UIControl(例如UIButton).
  2. UIControl(文本UIButton)中删除所有内容并使其背景透明(设置为清除颜色或将Alpha通道设置为0).
  3. 使用addTarget::action:forControlEvents:方法注册UIControlEvents.TouchDown控件上的事件.在handler方法中打印一些东西到控制台.
  4. 运行应用程序,按下控件.什么都没有打印到控制台.让它工作 - 不要使用手势识别器我需要提供的粒度addTarget::action:forControlEvents:.没有黑客解决方案.我知道在控件上设置背景alpha通道0.01会使它突然工作,但这是我不想要的黑客攻击.在这里描述你做了什么.

cocoa-touch uiview hittest uicontrol ios

6
推荐指数
1
解决办法
1235
查看次数