Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何在iOS开发中处理自定义事件?_Iphone_Objective C_Cocoa_Delegates_Uiviewcontroller - Fatal编程技术网

Iphone 如何在iOS开发中处理自定义事件?

Iphone 如何在iOS开发中处理自定义事件?,iphone,objective-c,cocoa,delegates,uiviewcontroller,Iphone,Objective C,Cocoa,Delegates,Uiviewcontroller,我们正在使用一些自定义视图处理一个项目。我们有以下层次结构: UIViewController->UIScrollView(自定义子类)->UIView(自定义子类) 我们展示了一个动态生成的按钮网格。当用户点击属于自定义滚动视图的其中一个UIView时,我们将触发一个如下所示的方法: - (void)handleTapFrom:(UITapGestureRecognizer *)recognizer { [[self superview] itemSelected:self]; }

我们正在使用一些自定义视图处理一个项目。我们有以下层次结构:

UIViewController->UIScrollView(自定义子类)->UIView(自定义子类)

我们展示了一个动态生成的按钮网格。当用户点击属于自定义滚动视图的其中一个UIView时,我们将触发一个如下所示的方法:

- (void)handleTapFrom:(UITapGestureRecognizer *)recognizer {
    [[self superview] itemSelected:self];
}
    itemScrollView = [[ItemScrollView alloc] initWithFrame:CGRectMake(...)];
    [itemScrollView setDelegate:self];      
    [self.view addSubview: itemScrollView];
本例中的super视图是UIScrollView的自定义子类。我们从这里启动另一种方法:

- (void) itemSelected: (id)selectedItem {
    itemView *item = selectedItem;
    [[self superview] initSliderViewForItemNamed:item.name];
    item = nil;
}
现在是事情破裂的地方。我们希望在UIViewController中启动另一个方法,以在视图层次结构的顶部加载新视图。因此,在UIViewController中,我们有以下方法来测试成功率:

- (void) initSliderViewForItemNamed:(NSString *)selectedItemName {
    NSLog(@"Selected item was found! %@",selectedItemName);
}
但我们从未达到这一点,应用程序崩溃。这是因为我们不能在这里引用UIViewController。相反,我们引用的是UIViewController的view属性。因此,我们的实际对象层次结构是:

UIViewController.view->UIScrollView(自定义子类)->UIView(自定义子类)

这就引出了两个问题

  • 如何从属于控制器视图属性的子视图中引用UIViewController
  • 这个方法很复杂。有更好的方法吗?我们是否应该将UIViewController指定为UIScrollView自定义子类的委托

  • 无法准确理解您想要实现的目标-您能描述一下最终目标吗?-这种方法听起来确实过于复杂和复杂。我想我有一个解决方案,但不知道它是否相关:P

    难以准确理解您想要实现的目标-您能描述一下最终目标吗?-这种方法听起来确实过于复杂和复杂。我想我有一个解决方案,但不知道它是否相关:P

    Jim你应该在自定义uiview子类上设置一个委托,让你的视图控制器成为它的委托,并遵守你刚才创建的协议,你会没事的(即:tableview正在做什么)

    Jim您应该在自定义uiview子类上设置一个委托,让您查看控制器,使其成为委托,并遵守您刚刚创建的协议,这样您就会很好(即:tableview正在做什么)

    是的,可以使用委托,也可以实现:-

    • (无效)触摸开始:(NSSet*)触摸事件:(UIEvent*)事件

    • (void)touchesend:(NSSet*)toucheevent:(UIEvent*)event

    取决于您希望如何处理触摸。

    是的,可以使用代理,也可以实施:-

    • (无效)触摸开始:(NSSet*)触摸事件:(UIEvent*)事件

    • (void)touchesend:(NSSet*)toucheevent:(UIEvent*)event

    取决于您希望如何处理触摸。

    我最终解决这个问题的方法是将视图控制器指定为滚动视图的代理。看起来是这样的:

    - (void)handleTapFrom:(UITapGestureRecognizer *)recognizer {
        [[self superview] itemSelected:self];
    }
    
        itemScrollView = [[ItemScrollView alloc] initWithFrame:CGRectMake(...)];
        [itemScrollView setDelegate:self];      
        [self.view addSubview: itemScrollView];
    
    然后,在我的ItemScrollView实现中,我可以通过以下方式引用ViewController:

        [[self delegate] initSliderViewForItemNamed:selectedItem.name];
    
    非常感谢所有回复的人。因此,将视图控制器设置为代理是正确的答案,但是,没有人详细说明如何执行此操作。所以我在这里的回复中已经谈到了这一点。有关此问题的更多信息,请参见代表:


    我最终解决这个问题的方法是将视图控制器指定为滚动视图的代理。看起来是这样的:

    - (void)handleTapFrom:(UITapGestureRecognizer *)recognizer {
        [[self superview] itemSelected:self];
    }
    
        itemScrollView = [[ItemScrollView alloc] initWithFrame:CGRectMake(...)];
        [itemScrollView setDelegate:self];      
        [self.view addSubview: itemScrollView];
    
    然后,在我的ItemScrollView实现中,我可以通过以下方式引用ViewController:

        [[self delegate] initSliderViewForItemNamed:selectedItem.name];
    
    非常感谢所有回复的人。因此,将视图控制器设置为代理是正确的答案,但是,没有人详细说明如何执行此操作。所以我在这里的回复中已经谈到了这一点。有关此问题的更多信息,请参见代表:


    做你想做的事情的惯用方法是将消息发送到服务器上。UIViewController参与响应器链,因此它将接收消息。

    执行所需操作的惯用方法是将消息向上发送。UIViewController参与响应程序链,因此它将接收消息。

    此组视图允许用户打开项目。我们希望在视图层次结构的顶部为选定对象实例化一个项目视图。当用户关闭一个项目时,他们将返回此视图。将假定我们的skype车队已修复它:d此视图集允许用户打开一个项目。我们希望在视图层次结构的顶部为选定对象实例化一个项目视图。当用户关闭一个项目时,他们将返回此视图。将假定我们的skype车队已修复它:D