如何从subView开始获取ViewController实例

时间:2013-12-02 18:19:27

标签: ios objective-c uiviewcontroller uiimageview

我有一个扩展UIImageView的UIImageCustom对象,在这个类的方法中,我希望获得ViewController的实例,其中添加了我的对象UICustom。

在我的类UIImageCustom的touchesBegan方法中,当我触摸UIImage时,我想在我的ViewController中添加其他UIImage:

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
    {
        UIImageView* newImageView=[[UIImageView alloc] initWithFrame:CGRectMake(60, 200, 200, 200)];

        //Here I need add newImageView in my ViewController
        [??? addSubview:newImageView];
    }

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:2)

如果要执行您想要执行的操作,则必须向UIImageCustom类添加自定义属性,该类包含对所有者视图控制器的引用。但是有更好的方法。

我建议你应该做的是在拥有视图的视图控制器中实现touchesBegan,并在那里执行任何自定义逻辑。

答案 1 :(得分:1)

您可以通过多种方式执行此操作(在UIImageCustom课程中设置自定义媒体资源,只需UIImageCustom将此新图片视图添加到自己的superview(例如{ {1}})。但这些方法看起来在概念上存在缺陷。视图不应该添加除自身以外的任何内容(如果您关闭剪辑,则将此新图像视图添加为[self.superview addSubview:newImageView]的子视图,本身,可能是另一种方法,肯定比我前面提到的前两种方法更具攻击性。)

但我可能会提出其他几种方法:

  1. 如果您的目标只是避免重复触摸代码,我可能会将其放在手势识别器子类中,而不是将其附加到某个随机UIImageCustom子类。手势识别器是放置这种与触摸相关的代码的正确位置。请参阅 iOS事件处理指南的Gesture Recognizers部分。

  2. 或者,如果您真的需要将此手势与一堆图像视图结合使用,我可能会使用自定义容器视图控制器来调解手势和图像视图之间的这种交互。有关详细信息,请参阅 View Controller编程指南中的Creating Custom Container View Controllers

    但您可以在视图控制器中包含触摸代码和处理这两个图像视图,然后使用视图控制器包含将其添加到现有视图控制器。

  3. 我们对特定设计的了解不足以提出另一个,但这些是一些想法。最有可能的是,自定义手势识别器方法应该足够了。

答案 2 :(得分:1)

创建一个类似这样的类别

@interface UIViewController (TOP_MODAL)
-(UIViewController*) topModalController;
@end

@implementation UIViewController (TOP_MODAL)
-(UIViewController*) topModalController{
    if (self.presentedViewController == nil){
        return self;
    }
    return self.presentedViewController.topModalController;
}

@end

然后

AppDelegate* delegate =  (AppDelegate*)[[UIApplication sharedApplication] delegate];
UIViewController* viewController = [delegate.window.rootViewController topModalController];
...
[viewController.view addSubview:newImageView];