Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Obj-C-如果点击custon tableview单元格中的按钮,则删除tableview行_Ios_Objective C_Uitableview - Fatal编程技术网

Ios Obj-C-如果点击custon tableview单元格中的按钮,则删除tableview行

Ios Obj-C-如果点击custon tableview单元格中的按钮,则删除tableview行,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我的自定义tableview单元格中有一个复选标记按钮。在我的tableview中点击该按钮时,我希望删除该行 现在,如果点击单元格本身,我下面的代码将删除该行,但如果点击单元格内的按钮,则不会删除该行。如何使单元格内的按钮被点击时,行被删除 ViewController.m - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if (tableVie

我的自定义tableview单元格中有一个复选标记按钮。在我的tableview中点击该按钮时,我希望删除该行

现在,如果点击单元格本身,我下面的代码将删除该行,但如果点击单元格内的按钮,则不会删除该行。如何使单元格内的按钮被点击时,行被删除

ViewController.m

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

    if (tableView == self.sidetableView) {

        NSMutableDictionary *nodeData = [[self.myFriendData objectAtIndex:indexPath.row] mutableCopy];

        NSString *nid = [nodeData objectForKey:@"nid"];
        [nodeData setObject:nid forKey:@"nid"];

        [self.myFriendData removeObjectAtIndex:indexPath.row];

        [DIOSNode nodeDelete:nodeData success:^(AFHTTPRequestOperation *operation, id responseObject) {

            [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];

            NSLog(@"node deleted!");
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"could not delete node!");
        }];


    }
-(void)accepted {

    NSString *friendAccepted = @"friendAccepted";
    [[NSUserDefaults standardUserDefaults] setObject:friendAccepted forKey:@"friendStatus"];
    [[NSUserDefaults standardUserDefaults] synchronize];

}

-(void)alreadyAccepted {

    NSString *savedValue = [[NSUserDefaults standardUserDefaults]
                            stringForKey:@"friendStatus"];
    NSString *accepted = savedValue;

    if (savedValue == NULL){


    } else {



        self.acceptFriend.userInteractionEnabled = NO;
        [self.acceptFriend setImage:[UIImage imageNamed:@"checkedgreen.png"] forState:UIControlStateNormal];


    }
}


- (IBAction)acceptFriend:(id)sender {

    [self alreadyAccepted];
    [self accepted];

        [self.acceptFriend setImage:[UIImage imageNamed:@"checkedgreen.png"] forState:UIControlStateNormal];

}
CustomTableViewCell.m

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

    if (tableView == self.sidetableView) {

        NSMutableDictionary *nodeData = [[self.myFriendData objectAtIndex:indexPath.row] mutableCopy];

        NSString *nid = [nodeData objectForKey:@"nid"];
        [nodeData setObject:nid forKey:@"nid"];

        [self.myFriendData removeObjectAtIndex:indexPath.row];

        [DIOSNode nodeDelete:nodeData success:^(AFHTTPRequestOperation *operation, id responseObject) {

            [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];

            NSLog(@"node deleted!");
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"could not delete node!");
        }];


    }
-(void)accepted {

    NSString *friendAccepted = @"friendAccepted";
    [[NSUserDefaults standardUserDefaults] setObject:friendAccepted forKey:@"friendStatus"];
    [[NSUserDefaults standardUserDefaults] synchronize];

}

-(void)alreadyAccepted {

    NSString *savedValue = [[NSUserDefaults standardUserDefaults]
                            stringForKey:@"friendStatus"];
    NSString *accepted = savedValue;

    if (savedValue == NULL){


    } else {



        self.acceptFriend.userInteractionEnabled = NO;
        [self.acceptFriend setImage:[UIImage imageNamed:@"checkedgreen.png"] forState:UIControlStateNormal];


    }
}


- (IBAction)acceptFriend:(id)sender {

    [self alreadyAccepted];
    [self accepted];

        [self.acceptFriend setImage:[UIImage imageNamed:@"checkedgreen.png"] forState:UIControlStateNormal];

}

我可以给出一个大概的想法,说明如何通过一种方式实现这一点

在cell类中声明按钮的出口

@property (nonatomic, retain) IBOutlet UIButton *deleteButton;
接下来,在
单元格中,为RowatineXpath
数据源
将按钮的目标分配给
视图控制器
中的一个函数。同时将
标签
分配给此按钮

在该函数的操作中,输入用于从模型/数据源中删除数据并重新加载tableView的代码和逻辑

请参阅在
ViewController
中为按钮分配操作。希望这有帮助

代码片段

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }

    cell.textLabel.text = [tableData objectAtIndex:indexPath.row];
    cell.myButton.tag = indexPath.row
    [cell.myButton addTarget:self 
             action:@selector(myAction) 
   forControlEvents:UIControlEventTouchUpInside];
        return cell;
    }

我认为一种方法是使用
delegate
模式来解决这个问题

首先在
UITableViewCell
子类中创建一个委托

@protocol CellCalssDelegate <NSObject>

- (void)deleteCellForIndexPath:(NSIndexPath *)indexPath;

@end

@interface MyCellSubclass: UITableViewCell
@property (nonatomic, weak) id <CellCalssDelegate > delegate;

@end
然后在cell类中创建
indepath
属性

@property (nonatomic, retain) IBOutlet UIButton *deleteButton;
然后在类(ViewController)中实现
UITableViewDataSource
UITableViewDelegate
方法

ViewContrller.m

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
      ....  
      cell.delegate = self;

      cell.indexPath = indexPath;

     ...
     return cell;
}

//CellDelegate Method...
-(void) deleteCellForIndexPath:(NSIndexPath)indexPath; {

        //write your logic for deleting the cell

}

我理解第一部分,但第二部分让我感到困惑:“…将按钮的目标指定给viewcontroller中的一个函数-也将标记指定给此按钮”。我该怎么做呢?尝试更新后的答案,如果不行,我会用代码片段更新答案。请更新代码片段-哈哈,我完全转过身了:/哈哈,对不起,谢谢!2分钟我找不到写下来嘿!我想我知道了,但我现在的问题是,如果我将“tableView”放在我的动作中,则找不到它(例如,此行[tableView deleteRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationFade];)?我尝试改为self.sidetableView,但它导致我的应用程序崩溃,原因是:-[\u NSPlaceholderArray initWithObjects:count:]:尝试从对象[0]插入nil对象'