2015-08-08 38 views
0

我想要touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event在子類別UIView中被調用。如何在iOS 8中的子類UIView中調用touchesBegan?

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

    [self.window setRootViewController:[[UIViewController alloc] init]]; 

    CGRect firstFrame = self.window.bounds; 
    HypnosisView *firstView = [[SubClassedView alloc] initWithFrame:firstFrame]; 

    [self.window addSubview:firstView]; 

    self.window.backgroundColor = [UIColor whiteColor]; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

SubClassedView.h

#import <UIKit/UIKit.h> 

@interface SubClassedView : UIView 

@end 

SubClassedView.m

#import "SubClassedView.h" 

@implementation SubClassedView 

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 
{ 
    NSLog(@"Here!"); 
} 

@end 

當我觸摸屏幕時,控制檯沒有輸出「Here!」因爲我認爲它應該。

我用的是最新的Xcode 7測試版5.

我怎樣才能touchesBegan以正確的方式被稱爲?

非常感謝。

回答

2

您正在將HypnosisView作爲窗口的子視圖添加,而不是作爲根視圖控制器視圖的子視圖。您的根視圖控制器應該是UIViewController子類,以便您可以修改其行爲來構建應用的導航流。

子類UIViewController,並添加您HypnosisView作爲其視圖層次子視圖:

@interface MyViewController : UIViewController 
@property(nonatomic, strong) HypnosisView *hypnosisView; 
@end 

@implementation MyViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.hypnosisView = [[HypnosisView alloc] initWithFrame:self.view.bounds]; 
    [self.view addSubview:hypnosisView]; 
} 

@end 

然後在你的應用程序代理,請將您的視圖控制器子類是根視圖控制器:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

    MyViewController *myVC = [[MyViewController alloc] init]; 
    [self.window setRootViewController:myVC]; 

    self.window.backgroundColor = [UIColor whiteColor]; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

雖然這是相當古老的做法。是否有任何理由不使用故事板來構建界面?

+0

我正在用一本「舊書」(2014年出版)學習iOS開發。我知道這本書有點過時,但我仍然想完成它。謝謝! – Vayn

+1

@Vayn足夠公平,學習如何以舊的方式做事情沒有任何壞處(注意你2014年不是老了!)。事實上,從長遠來看它可能是非常有益的:)。 – Stuart

相關問題