2013-03-18 3 views
0

Я пытаюсь создать UITableView в UIViewController (я бы использовал UITableViewController, но я хочу, чтобы UITableView использовал только половину пространства экрана), который создаст новый пользовательский интерфейс ячейку каждый раз, когда я нажимаю кнопку, и отображаю текущее время в этой ячейке и время с момента последнего нажатия кнопки (так что время в этой ячейке минус время в ячейке над ней). Проблема в том, что когда я нажимаю кнопку, ничего не происходит или, если я не инициализирую свойство, которое я создал для UITableView, появляется пустая ячейка.Не удается динамически создавать свои пользовательские ячейки в UITableView

В моей ячейке есть 3 UILabel, inOut, entryTime и delta, а IBOutlet, который я создал для UITableView, является timeTable. newEntry - это кнопка. Я установил источник данных UITableView и передал свой UIViewController, «вызвал» протоколы UITableViewDataSource, UITableViewDelegate в заголовке UIViewController. Я не могу найти, что случилось.

вот мой код UIViewController:

@interface MainViewController() 

@property (strong, nonatomic) Brain *brain; 
@end 

@implementation MainViewController{ 
    @private 
    NSMutableArray *_entryArray; 
    NSMutableArray *_timeSinceLastEntryArray; 
} 
@synthesize brain=_brain; 
@synthesize timeTable=_timeTable; 


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    _brain = [[Brain alloc] init]; 
    _entryArray = [[NSMutableArray alloc] init]; 
    _timeSinceLastEntryArray = [[NSMutableArray alloc] init]; 
    _timeTable = [[UITableView alloc] initWithFrame:CGRectZero]; 

} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ 
    return 1; 
} 


-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
    return [_entryArray count]; 
} 

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

    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 
    if (indexPath.row%2==0){ 
     cell.inOut.text = [NSString stringWithFormat:@"Entrada %d", indexPath.row/2 +1]; 
     cell.entryTime.text = [NSString stringWithFormat:@"%@", [_entryArray objectAtIndex:indexPath.row]]; 
     if (indexPath.row==0){ 
      [email protected]""; 
     } 
     else { 
      cell.delta.text = [_timeSinceLastEntryArray objectAtIndex:indexPath.row]; 
     } 
    } 
    else{ 
     cell.inOut.text = [NSString stringWithFormat:@"Saída %d", (indexPath.row+1)/2]; 
     cell.entryTime.text = [NSString stringWithFormat:@"%@",[_entryArray objectAtIndex:indexPath.row]]; 
     cell.delta.text = [_timeSinceLastEntryArray objectAtIndex:indexPath.row]; 
    } 



    return cell; 
} 



- (IBAction)newEntry:(id)sender { 

    [_entryArray addObject:[self.brain currentTime]]; 
    NSInteger numberOfEntrys= [_entryArray count]; 
    if (numberOfEntrys >1){ 
     NSString *timeSinceLastEntry = [_brain timeSince:[_entryArray objectAtIndex:(numberOfEntrys-2)]]; 
     [_timeSinceLastEntryArray addObject:timeSinceLastEntry]; 
    } 
    else { 
     [_timeSinceLastEntryArray addObject:@"0"]; 
    } 

    [_timeTable reloadData]; 
} 


@end 

и CustomCell:

@implementation CustomCell

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{ 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 
     // Initialization code 
    } 
    return self; 
} 

- (void)setSelected:(BOOL)selected animated:(BOOL)animated 
{ 
    [super setSelected:selected animated:animated]; 

    // Configure the view for the selected state 
} 

@synthesize inOut=_inOut, entryTime=_entryTime, delta=_delta; 
- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier { 

    if (self = [super initWithFrame:frame reuseIdentifier:reuseIdentifier]) { 

     // Initialization code 

     _inOut = [[UILabel alloc]init]; 

     _inOut.textAlignment = UITextAlignmentLeft; 


     _entryTime = [[UILabel alloc]init]; 

     _entryTime.textAlignment = UITextAlignmentLeft; 


     _delta = [[UILabel alloc]init]; 

     _delta.textAlignment = UITextAlignmentLeft; 

     [self.contentView addSubview:_entryTime]; 

     [self.contentView addSubview:_inOut]; 

     [self.contentView addSubview:_delta]; 

    } 

    return self; 

} 
@end 

Спасибо за помощь :)

ответ

1

Я вижу, вы положили инициализировать код в

- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier 

Но вы создаете объект с

cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 

и вы не обеспечили кадр к представлению, что вы создали

_inOut = [[UILabel alloc]init]; 
_entryTime = [[UILabel alloc]init]; 
_delta = [[UILabel alloc]init]; 

Надеется, что это помогает вам

+0

Большого спасибо за указание эти ошибки :) Я их исправил, но он все равно не работает. Я поместил NSLog со случайным текстом в мой столбец tableView: (UITableView *) tableView numberOfRowsInSection: (NSInteger), чтобы увидеть, запущен ли он, и приложение даже не запускает этот метод, есть ли у вас какие-либо идеи Зачем?? – dietbacon

+0

@ dietbacon Обновите свой вопрос с помощью своего последнего кода. – rmaddy

+0

oooops, nvm, теперь он работает, я просто удалил код инициализации для UITableView. Большое спасибо!!!! Мне нравится, как люди в SO так полезны :) – dietbacon

Смежные вопросы