2014-08-29 5 views
0

Это MyViewController.mUIButton addTarget не работает в подкласс UIViewController

actionNames[0] = @"hoge"; 
actionNames[1] = @"piyo"; 

NSMutableArray *actionConts = [[NSMutableArray alloc] init]; 
for(int i=0; i<[actionNames count]; i++){ 
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [btn setFrame:CGRectMake(DEVICE_WIDTH/3 * i, 0, DEVICE_WIDTH/3, 45)]; 
    // actionNames is NSMutableArray 
    [btn setTitle:actionNames[i] forState:UIControlStateNormal]; 
    [btn setUserInteractionEnabled:YES]; 

    actionConts[i] = btn; 
} 

// ↓ does not work 
[actionConts[1] addTarget:self action:@selector(follow) forControlEvents:UIControlEventTouchUpInside]; 

// actionSubs is NSMutableArray 
for(int i=0; i<[actionConts count]/3; i++){ 
    actionSubs[i] = [[UIView alloc] initWithFrame:CGRectMake(0, 0, DEVICE_WIDTH, 45)];; 
} 
for(int i=0; i<[actionConts count]; i++){ 
    int sub = floor((float)i/3.0); 

    [actionSubs[sub] addSubview:actionConts[i]]; 

} 

UIScrollView *actionScr = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 150, 320, 45)]; 
[actionScr setPagingEnabled:YES]; 
[actionScr setShowsHorizontalScrollIndicator:NO]; 
[actionScr setBounces:NO]; 
actionScr.contentSize = CGSizeMake([actionSubs count] * DEVICE_WIDTH, 45); 
for(int i=0; i<[actionSubs count]; i++){ 
    [actionScr addSubview:actionSubs[i]]; 
} 
  1. кнопку Создать. => ActionConts [п]
  2. addTarget к actionConts [1]
  3. actionSubs [] Alloc
  4. addSubView actionConts [п] для actionSubs [N]
  5. addSubView actionSubs [N], чтобы actionScr
  6. (addSubView actionScr к DRW)
    (DRW это экземпляр UIView "IBOutlet UIView * DRW;".)

При нажатии на эту кнопку, он не работает ... ('; ω; `)

Пожалуйста, помогите мне. Спасибо.

+0

Это потому, что '[число действительных имен]' равно нулю и, следовательно, ваш цикл for никогда не запускается –

+0

actionNames не actionConts, так что смотрите на код, который вы можете угадать, его пустой –

+0

Не могли бы вы поделиться кодом, который добавляет кнопки для просмотра? –

ответ

0

Ваш код отлично работает для меня. Я только заменить некоторые строки:

[actionConts[1] addTarget:self action:@selector(follow) forControlEvents:UIControlEventTouchUpInside]; 

замещаются:

for (UIButton *button in actionConts) { 
    [button addTarget:self action:@selector(follow) forControlEvents:UIControlEventTouchUpInside]; 
} 

, что позволяет добавлять действия к каждой кнопке из массива.

Также я заменил для цикла условие из:

for(int i=0; i<[actionConts count]/3; i++) 

к:

for(int i=0; i<ceil((float)[actionConts count]/3.0); i++) 

, что позволяет иметь по крайней мере одну SuperView для кнопок.

Теперь follow - это способ, который будет срабатывать для каждой вашей кнопки. Вы можете установить свойство UIButton.tag, чтобы уточнить, какой из них нажат.