iPhone SDK - программно добавляем UISwitch в цикл - PullRequest
0 голосов
/ 16 января 2012

Я довольно новичок в Objective-C и программировании iPhone / iPad в целом.

Я работаю над группой моей программы, которая ведет список пользователей, хранящихся в базе данных sqlite3.Я пытаюсь перебрать список пользователей и программно добавить UILabel, UISwitch и UIButton в UIScrollView.

Я пытаюсь сохранить индекс соответствующей кнопки удаления в теге UISwitch Iгенерируюсь динамически.Кнопка удаления должна появляться, когда переключатель выключен.

Для этого у меня есть следующее:

-(IBAction)switchValueChange:(id)sender{
        UISwitch *_switch = (UISwitch *)sender;
    UIButton *btnDelete = (UIButton *)[DeleteList objectAtIndex:_switch.tag];
    if(_switch.on) {
        [btnDelete setHidden:YES];
    } else {
        [btnDelete setHidden:NO];
    }
}

-(void) loadUsers {
//Create User List
    NSMutableArray *nsa;
    float yOffset = 30.0f;
    int iIndex = 0;
    for(nsa in [dataLib getUsers]) {
        //Create user's Name Label
        UILabel *lblUserName = [[UILabel alloc] initWithFrame:CGRectMake(20, yOffset, 400, 20)];
        lblUserName.text = [NSString stringWithFormat:@"%@, %@", [nsa objectAtIndex:2], [nsa objectAtIndex:1]];
        lblUserName.backgroundColor = [UIColor clearColor];
        lblUserName.textColor = [UIColor whiteColor];
        [svUserList addSubview:lblUserName];
        [lblUserName release];

        //Create Active Switch
        UISwitch *swActive = [[UISwitch alloc] initWithFrame:CGRectMake(440, yOffset, 200, 20)];
        [swActive addTarget:self 
                     action:@selector(switchValueChange:) 
           forControlEvents:UIControlEventValueChanged];
        [swActive setOn:[[nsa objectAtIndex:6] boolValue]];
        swActive.tag = iIndex;
        [svUserList addSubview:swActive];


        //Create Delete User Button
        UIButton *btnDelete = [[UIButton alloc] initWithFrame:CGRectMake(660, yOffset, 100, 20)] ;
        [btnDelete setTitle:@"Delete" forState:UIControlStateNormal];
        [btnDelete setTitle:@"Delete" forState:UIControlStateHighlighted];
        [btnDelete setBackgroundColor:[UIColor redColor]];
        [btnDelete setTitleColor:[UIColor yellowColor] forState:UIControlStateNormal];
        [btnDelete setTitleColor:[UIColor yellowColor] forState:UIControlStateHighlighted];
        [btnDelete setTag:[[nsa objectAtIndex:0] intValue]];
        [btnDelete setHidden:swActive.on];
        [svUserList addSubview:btnDelete];
        [btnDelete release];

        iIndex++;
        yOffset += 25;
    }
}

Перо загружается в симулятор, но когда я переключаю его, онвыдает ошибку SIGABRT и говорит:

[__NSCFDictionary switchValueChange]: unrecognized selector sent to instance 0x6a9a070

Я потратил почти 5 часов, пытаясь выяснить это, и я нахожусь в конце.Если у кого-то есть представление о том, что я делаю неправильно, или о том, как лучше показать это, я очень ценю это понимание.

...