2013-08-06 38 views
1

在我的情況,class C子類UIViewControllerclass A and B子類UIViewclass AUIButton。我寫下如下的代碼。iOS選擇器不適合我的情況,爲什麼?

class C:

B *b = [[B alloc] init]; 
[self.view addSubView:b]; 

A *a = [[A alloc] initWithTarget:self action:@Selector(methodX:)]; 
[b methodY:a]; 

class B

- (void)methodY:(A *)a 
{ 
    [sef addSubView:a]; 
} 

class A

- (id)initWithTarget:(id)target action:(SEL)action 
{ 
    self = [super initWithFrame:frame]; 
    UIButton *btn = [[UIButton alloc] init]; 
    [btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside]; 
    [self addSubView:btn]; 
    return self; 
} 

class CmethodX:沒有執行。

我的代碼有問題嗎?
選擇器如何在objective-c中工作?
謝謝!

+0

請檢查代碼,你可能有一些錯別字。你的意思是'A * a = [[A alloc] initWithTarget ...'。 –

+0

在A – Warewolf

+0

中放置methodX嘗試在頭文件中的上面一行「@interface A」中導入@class UIViewController。 – Warewolf

回答

0

你的代碼是在我的電腦上運行得非常好。所以我想你只是添加按鈕出A,這意味着你的按鈕的幀不在A的框架

+0

真的嗎?我在C中初始化A和B(UIView的子類),然後將B添加到C.view,然後調用B的methodY,在該方法中,我將A添加爲B的子視圖,因此,A中的按鈕不會調用其選擇器methodX在C. – fisher

+0

@fisher是的。改變'[btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];''進入'[btn addTarget:self action: @selector(aMethod)forControlEvents:UIControlEventTouchUpInside];'並在A中編寫aMethod以查看它是否可以工作 –

+0

謝謝!我稍後再檢查一次。 – fisher

0

你寫道,A是UIView的子類。那麼你怎麼樣能夠通過

[[C alloc]init] 

在C是一個UIViewController的情況下進行實例化?您確定 - 在運行時 - 變量* aUIView類型?

0

這段代碼似乎有這麼多錯誤。 開始,

你如何使用此代碼分配C類對象?

A *a = [[C alloc] initWithTarget:self action:@Selector(methodX:)]; 

其次,如果C是UIViewController一個子類,你是如何將其添加到自己的這種方法嗎?這裏大概是Class B這是一個UIView的對象。

- (void)methodY:(C *)c 
{ 
    [sef addSubView:c]; 
} 
-1
在C類

A *a = [[A alloc] initWithTarget:self action:@Selector(methodX:)]; 

目標

是不對的.......

+0

那麼,誰應該成爲目標?我想調用C中的選擇器。 – fisher

+0

是否嘗試將代碼放在UIButton * btn = [[UIButton alloc] init]; [btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside]; [A addSubView:btn];在C? – Crash

相關問題