Флажки в UITableView - PullRequest
       6

Флажки в UITableView

0 голосов
/ 16 сентября 2010

Я пытаюсь создать список опций с флажками. Я использую UITableView и добавляю кнопки нестандартного типа в таблицу как флажки.

Мой код для cellForRowAtIndexPath метода вставлен ниже:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
CGRect a=CGRectMake(0, 0, 310, 32);
UIImageView *aImg=[[UIImageView alloc] initWithFrame:a];
UIImageView *bImg=[[UIImageView alloc] initWithFrame:a];
aImg.image=[[[Resources getResources] getImageLoader] getMainMenuUnselectedImage];
bImg.image=[[[Resources getResources] getImageLoader] getLiveScoreSmallBg];
[aImg setContentMode:UIViewContentModeScaleToFill];
[bImg setContentMode:UIViewContentModeScaleToFill];
cell.backgroundView = [[UIView alloc] initWithFrame:a];
[cell.backgroundView addSubview:aImg];
cell.selectedBackgroundView=bImg;
cell.font = [UIFont boldSystemFontOfSize:16];
cell.selectedTextColor = [UIColor blackColor];
UIImage *checked = [UIImage imageNamed:@"check_filled.png"];
UIImage *unchecked = [UIImage imageNamed:@"check_empty.png"];
UIButton *button = [[UIButton buttonWithType:UIButtonTypeCustom] initWithFrame:CGRectMake(3, 3, 30, 30)];
[button addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchUpInside];
[button setImage: [UIImage imageNamed:@"check_filled.png"] forState: UIControlStateSelected];
[button setImage: [UIImage imageNamed:@"check_empty.png"] forState: UIControlStateNormal];
[button setEnabled:YES];
button.tag = indexPath.row;
[button setUserInteractionEnabled:YES];
[cell.contentView addSubview:button];

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(40, 3, 250, 17)];
label.font = [UIFont boldSystemFontOfSize:15]; 
label.backgroundColor = [UIColor clearColor];
label.text = [teamsList objectAtIndex:indexPath.row];
[cell.contentView addSubview:label];

    [button release];
[label release];
[aImg release];
[bImg release];

return cell;
}

Проблема в том, что когда я запускаю программу, экран появляется без кнопок. Также, когда я щелкаю по любой строке, происходит сбой программы.

Ответы [ 2 ]

2 голосов
/ 16 сентября 2010

Есть некоторые проблемы с вашим кодом, которые могут не относиться к вашей проблеме, но все же ...

  1. Вы создаете содержимое ячейки каждый раз, когда ячейка используется повторно - поэтому, если вы прокручиваете таблицу назад и вперед, повторно используемые ячейки будут содержать несколько идентичных подпредставлений - это не то, что вы хотите. Чтобы исправить это, вы должны переместить создание содержимого в блок создания соты:

    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        // Create cell contents here!
        ...
    }
    ...
    
  2. Вы не должны отпускать свою кнопку - поскольку вы создаете ее с удобным способом, кнопка автоматически освобождается

    button = [[UIButton buttonWithType:UIButtonTypeCustom] 
                         initWithFrame:CGRectMake(3, 3, 30, 30)];
    
  3. Эта строка также может вызвать проблемы:

    [button addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchUpInside];
    

    Здесь вы устанавливаете селектор, который не получает параметров. Если ваш метод buttonPressed объявлен (наиболее распространенный способ)

    - (void) buttonPressed:(id)sender;
    

    Затем вы должны создать селектор как @selector (buttonPressed :), чтобы указать, что он действительно принимает 1 параметр

0 голосов
/ 19 марта 2012
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
{
static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) 
{
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}
int i=indexPath.row;


ibutton = [UIButton buttonWithType:UIButtonTypeRoundedRect];

[ibutton setTitle:@"i" forState:UIControlStateNormal];

ibutton.frame = CGRectMake(430.0,40.0,100.0,60.0);
[cell.contentView addSubview:ibutton];
[ibutton setTag:indexPath.row];
NSLog(@"the button tag is %d",ibutton.tag);
[ibutton addTarget:self action:@selector(detailSubView:) forControlEvents:UIControlEventTouchUpInside];
addbutton=[UIButton buttonWithType:UIButtonTypeRoundedRect];
[addbutton setTitle:@"add" forState:UIControlStateNormal];
addbutton.frame=CGRectMake(560, 40, 100, 60);
[addbutton setTag:indexPath.row];
[cell.contentView addSubview:addbutton];
 [addbutton addTarget:self action:@selector(addclicked:) forControlEvents:UIControlEventTouchUpInside];

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(350.0, 60.0, 50.0, 25.0)];
[label setBackgroundColor:[UIColor whiteColor]];
 label.text=@"2.99$";
label.font = [UIFont boldSystemFontOfSize:18];
[cell.contentView addSubview:label];
[label release];

[cell.contentView addSubview:lab];
return cell;
}


-(IBAction)detailSubView:(id)sender{


NSLog(@"working in detail view");
UIButton *button = (UIButton *)sender; 

NSLog(@"%d",button.tag);
a=button.tag;
NSLog(@"%d",a);
  category1* B2 = [[category1 alloc] init];
  UINavigationController *B2Nav = [[UINavigationController alloc] initWithRootViewController:B2];   
  B2Nav.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
  [self presentModalViewController:B2Nav animated:YES];
  [B2 release];
  [B2Nav release];
}


-(IBAction)addclicked:(id)sender{



  UIButton *button = (UIButton *)sender; 

NSLog(@"%d",button.tag);
a=button.tag;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...