如何在添加行后更新UITableView?

时间:2014-08-31 04:37:10

标签: ios objective-c iphone uitableview xcode5

我有一个非常简单的UITableView。我在这里初始化它创建一些对象并将它们添加到tableview,它完美无缺:

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];


    //Instantiate
    lapTimerModel = [[LTModel alloc] init];
    [lapTimerModel addChallenge:@"I made it"];
    [lapTimerModel addChallenge:@"Say the alphabet"];
    [lapTimerModel addChallenge:@"100 Meter Sprint Challenge"];
    [lapTimerModel addChallenge:@"Read the csci342 al spec challenge"];

}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

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

}

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


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    if(cell == nil){

        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    LTChallenge *challenge = [lapTimerModel challengeAtIndex:indexPath.row];
    cell.textLabel.text = challenge.name;
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    return cell;
}

现在我在这里定义一个按钮,我想在表中添加另一行,我创建了一个新对象并添加到其他对象的列表中但是它没有添加到TableView中?我假设我必须再次调用一些东西来抛出我的对象列表并带来新的对象。

- (IBAction)newAlert:(id)sender {

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Enter Name"
                                                    message:@"  "
                                                   delegate:self
                                          cancelButtonTitle:@"Cancel"
                                          otherButtonTitles:@"OK", nil];
    alert.alertViewStyle = UIAlertViewStylePlainTextInput;
    [alert show];
}


- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{

    if (buttonIndex == 1) {
        NSString *name = [alertView textFieldAtIndex:0].text;
        NSLog(@"%@",name);
        //Create a new challange
        [lapTimerModel addChallenge:name];
        //[self.tableView reloadData]; Not working?!

    }
}


@end

我可以在控制台的警报中看到我输入的内容。

2 个答案:

答案 0 :(得分:1)

检查这些:

  1. 您已正确设置tableView委托和dataSource。
  2. 您新添加的数据实际上是添加到dataSource。
  3. if(buttonIndex == 1)为true& [self.tableView reloadData]正在调用。
  4. 希望这会有所帮助.. :)

答案 1 :(得分:0)

你应该为你的lapTimerModel创建一个iVar

@property (strong, nonatomic) LTModel *lapTimerModel;

并在所有UITableViewDelegate函数中调用self.lapTimerModel。

您可以调用

,而不是调用重新加载方法
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{

    if (buttonIndex == 1) {
        NSString *name = [alertView textFieldAtIndex:0].text;
        NSLog(@"%@",name);
        //Create a new challange
        [self.lapTimerModel addChallenge:name];
        //[self.tableView reloadData]; Not working?!
        [[self tableView] beginUpdates];
        [[self tableView] reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationAutomatic];
        [[self tableView] endUpdates];
    }
}