0

テーブルビューを作成して特定の行を削除しようと何度も試みましたが、以前にここでこの質問をして、アドバイスを実装しましたが、テーブルを取得することさえできませんでした

ViewController.h

   @interface XYZViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>

        @property (strong, nonatomic) UITableView *myTable;
        @property (strong, nonatomic) NSMutableArray *names;
        @property (weak, nonatomic) IBOutlet UIBarButtonItem *editButton;

    - (IBAction)editMyTable:(id)sender;

    @end

ViewController.m

@implementation XYZViewController

@synthesize names, myTable, editButton;

- (void)viewDidLoad
{
    [super viewDidLoad];

    //input values into the mutable array
    names = [[NSMutableArray alloc]initWithObjects:

             @"Bob",
             @"Chris",
             @"Tom"

              , nil];

    editButton = self.editButtonItem;

}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{

    return 1;

}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{

    return @"Friends";

}

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

    return [self.names count];

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    //create an identifier
    static NSString *identifier;

    //create the cell with the identifier
    UITableViewCell *cell = [myTable dequeueReusableCellWithIdentifier:identifier];

    //check if cell is nil
    if (cell == nil) {

        //assign cell
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];

    }

    //assign the names of the array to each cell
    cell.textLabel.text = [names objectAtIndex:indexPath.row];

    return cell;

}

- (IBAction)editMyTable:(id)sender
{

    [editButton setTitle:@"Done"];
    [myTable setEditing:YES animated:YES];

}

- (void)setEditing:(BOOL)editing animated:(BOOL)animated {

    [super setEditing:editing animated:animated];
    [myTable setEditing:editing animated:animated];

}

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{

    return YES;

}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{

    if (editingStyle == UITableViewCellEditingStyleDelete) {

        //remove from array
        [names removeObjectAtIndex:indexPath.row];

        //remove from tableView
        [myTable deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];

    }

}

- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath
{
    return NO;
}

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

@end

画像: http://postimg.org/image/g9wqwuo6v/

どんな助けでも大歓迎です!前もって感謝します!:)

4

1 に答える 1

1

あなたの問題は、あなたがあなたのmyTable財産を配線していないことにあるようです。IBOutletコードのどこにも接続を確立することはありません。呼び出す[myTable setEditing:YES animated:YES];と、テーブルに送信されnilます。myTableedit メソッドを呼び出す前に の値を出力することで、これを確認できますNSLog(@"%@", myTable);

setEditing:animated:また、UIViewControllerサブクラスではなくサブクラスであるため、オーバーライドを削除する必要がありますUITableView。最初の電話をかけるIBActionだけで十分です。

于 2013-10-26T18:16:53.343 に答える