2014-03-05 61 views
0

我有一個名爲TargetView的子類UIView,它包含幾個CGPath。當用戶點擊任何CGPath(在UIView的touchesBegan中)時,我想對父視圖控制器進行更改。這裏是TargetView的代碼(UIView)UIViewController需要響應來自子類UIView的事件

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 

    CGPoint tap = [[touches anyObject] locationInView:self]; 

    if(CGPathContainsPoint(region, NULL, tap, NO)){ 
     // ...do something to the parent view controller 
    } 
} 

我該怎麼做?謝謝!

回答

0

你需要傳遞一個參考家長的viewController到UIView的分配,並存儲這對UIView的屬性然後你父的引用,你可以用它來調用該方法/設置屬性家長。

1

我建議您將父視圖控制器設置爲子視圖控制器的委託。然後,當在子視圖控制器中檢測到觸摸時,可以調用委託來響應。這樣,你的子視圖控制器將只有一個對父級的弱引用。

if (CGPathContainsPoint(region, NULL, tap, NO)) { 
    [self.delegate userTappedPoint:tap]; 
} 
0

使用協議並設置父視圖控制器代表爲你的UIView。

在你的UIView子類的.h文件:

@protocol YourClassProtocolName <NSObject> 

@optional 
- (void)methodThatNeedsToBeTriggered; 

@end 

@interface YourClass : UIView 

... 

@property(weak) id<YourClassProtocolName> delegate; 

@end 

在.m文件:

@interface YourClass() <YourClassProtocolName> 
@end 

@implementation YourClass 
... 

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 

    CGPoint tap = [[touches anyObject] locationInView:self]; 

    if(CGPathContainsPoint(region, NULL, tap, NO)){ 
     if (_delegate && [_delegate respondsToSelector:@selector(methodThatNeedsToBeTriggered)]) { 
      [_delegate methodThatNeedsToBeTriggered]; 
     } 
    } 
} 
@end 

現在集所需的UIViewController作爲委託這一新的協議,並落實在它methodThatNeedsToBeTriggered

相關問題