Как я могу установить / получить значение тега (NSInteger) для UISwitch - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть динамический UISwitches, который я создаю, используя цикл for. Я даю значение тега для каждого элемента управления, чтобы иметь идентичность. Я хочу достичь этих значений позже, но каждый раз получаю 0. Что я делаю не так?

for(int i = 0;i < self.extraArray.count; i++) {

    ProductPropertiesModel *model = (ProductPropertiesModel *)[self.extraArray objectAtIndex:i];

    UISwitch *switchButton = [[UISwitch alloc] initWithFrame:CGRectZero];    
    switchButton.translatesAutoresizingMaskIntoConstraints = false;    
    switchButton.tag = [model Id];    
    [switchButton setOn:NO];    
    [self.view addSubview:switchButton];    
    [switchButton addTarget:self action:@selector(setState:)
           forControlEvents:UIControlEventValueChanged];

}

-(void)setState:(id)sender
{

    UISwitch *uiswitch = (UISwitch *)sender;    
    NSInteger tagInteger= uiswitch.tag;    
    NSLog(@"%@", [NSString stringWithFormat:@"%li",(long)tagInteger]);

}

Значение тега равно 0, но это неверно.

Ответы [ 3 ]

1 голос
/ 12 апреля 2019

Я нашел проблему.Я только что сделал опечатку.Я заметил, что я писал опечатку, когда брал данные JSON.Я заметил, что Id пишет вместо ID.

NSError *jsonError;
        self.extraJsonArray = nil;
        self.extraJsonArray = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&jsonError];
        self.extraArray = [[NSMutableArray alloc]init];
        for(int j = 0;j < self.extraJsonArray.count;j++){
            @try {
                //NSInteger *Id = (NSInteger *)[(NSNumber *)[[self.extraJsonArray objectAtIndex:j]objectForKey:@"Id"] integerValue]; Problem is here
                NSInteger *Id = (NSInteger *)[(NSNumber *)[[self.extraJsonArray objectAtIndex:j]objectForKey:@"id"] integerValue];
                double price = (double)[(NSNumber *)[[self.extraJsonArray objectAtIndex:j] objectForKey:@"price"] doubleValue];
                NSString *property =(NSString *)[[self.extraJsonArray objectAtIndex:j] objectForKey:@"property"];
                ProductPropertiesModel *model = [[ProductPropertiesModel alloc] init];
                [model setId:Id];
                [model setProperty:property];
                [model setPrice:price]; 
                [model setChecked:@"No"];
                [self.extraArray addObject:model];
            } @catch (NSException *exception) {
                NSLog(@"%@", exception.reason);
            } @finally {

            }
        }
0 голосов
/ 12 апреля 2019

Я бы рекомендовал вместо этого установить [model id] в качестве тега, вы должны установить индекс массива в качестве тега.

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

  ProductPropertiesModel *model = (ProductPropertiesModel *)[self.extraArray objectAtIndex:i];

Надеюсь, это поможет.

0 голосов
/ 12 апреля 2019

Попробуйте это:

for (int i =0; i < self.extraArray.count; i++) {

    CGRect frame = CGRectMake(x, y, height, width);
    UISwitch *switchControl = [[UISwitch alloc] initWithFrame:frame];

    //add tag as index 
    switchControl.tag = i;
    [switchControl addTarget:self action:@selector(setState:) forControlEvents: UIControlEventValueChanged];

    [switchControl setBackgroundColor:[UIColor clearColor]];
    [self.view addSubview:switchControl];

    y= y+50.0;
}

- (IBAction) setState: (UISwitch *) sender {    
    NSLog(@"no.%d %@",sender.tag, sender.on ? @"On" : @"Off");
    //use sender.tag , you know which switch you selected 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...