2014-02-17 8 views
3

當我點擊一個項目時,它似乎沒有註冊並在右側添加複選標記。當我點擊後面的項目時,它會在我之前點擊的項目旁邊顯示一個複選標記,但不是我剛剛點擊的項目,依此類推,始終保留一個動作。通過Apple的ToDoList應用程序教程,項目點擊不會正確添加「已完成」複選標記。

XYZToDoListViewController.m:

// 
// XYZToDoListViewController.m 
// ToDoList 
// 
// Created by Andrew Ghobrial on 2/15/14. 
// 
// 

#import "XYZToDoListViewController.h" 
#import "XYZToDoItem.h" 

@interface XYZToDoListViewController() 

@property NSMutableArray *toDoItems; 

@end 

@implementation XYZToDoListViewController 

- (void)loadInitialData { 
    XYZToDoItem *item1 = [[XYZToDoItem alloc] init]; 
    item1.itemName = @"Buy milk"; 
    [self.toDoItems addObject:item1]; 
    XYZToDoItem *item2 = [[XYZToDoItem alloc] init]; 
    item2.itemName = @"Buy eggs"; 
    [self.toDoItems addObject:item2]; 
    XYZToDoItem *item3 = [[XYZToDoItem alloc] init]; 
    item3.itemName = @"Read a book"; 
    [self.toDoItems addObject:item3]; 
} 

- (IBAction)unwindToList:(UIStoryboardSegue *)segue 
{ 



} 

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

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.toDoItems = [[NSMutableArray alloc] init]; 

    [self loadInitialData]; 

    // Uncomment the following line to preserve selection between presentations. 
    // self.clearsSelectionOnViewWillAppear = NO; 

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller. 
    // self.navigationItem.rightBarButtonItem = self.editButtonItem; 
} 

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

#pragma mark - Table view data source 

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 

    // Return the number of rows in the section. 
    return [self.toDoItems count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"ListPrototypeCell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 
    XYZToDoItem *toDoItem = [self.toDoItems objectAtIndex:indexPath.row]; 
    cell.textLabel.text = toDoItem.itemName; 
    if (toDoItem.completed) { 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 
    } else { 
     cell.accessoryType = UITableViewCellAccessoryNone; 
    } 
    return cell; 
} 

/* 
// Override to support conditional editing of the table view. 
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Return NO if you do not want the specified item to be editable. 
    return YES; 
} 
*/ 

/* 
// Override to support editing the table view. 
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     // Delete the row from the data source 
     [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    } 
    else if (editingStyle == UITableViewCellEditingStyleInsert) { 
     // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view 
    } 
} 
*/ 

/* 
// Override to support rearranging the table view. 
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath 
{ 
} 
*/ 

/* 
// Override to support conditional rearranging of the table view. 
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Return NO if you do not want the item to be re-orderable. 
    return YES; 
} 
*/ 

/* 
#pragma mark - Navigation 

// In a story board-based application, you will often want to do a little preparation before navigation 
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    // Get the new view controller using [segue destinationViewController]. 
    // Pass the selected object to the new view controller. 
} 

*/ 



#pragma mark - Table view delegate 

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [tableView deselectRowAtIndexPath:indexPath animated:NO]; 
    XYZToDoItem *tappedItem = [self.toDoItems objectAtIndex:indexPath.row]; 
    tappedItem.completed = !tappedItem.completed; 
    [tableView reloadRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationNone]; 
} 



@end 
+1

大問題,也做了同樣的事情,你剛剛保存我很長一段時間,謝謝! – YPCrumble

回答

11
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath 

應該

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

通知你有Deselect,但要Select

相關問題