0

UITableView カスタム セル (別の XIB を利用している) が削除アクションで適切に機能し、PROPER セルが適切に削除され、正しいセルが削除されてテーブルビューが更新されたようです。

ただし、カスタムセルのボタンをクリックして道順を取得するアクションを作成しようとすると、selectedEvent オブジェクトの詳細が変更されずに、どのセルがクリックされても、その 1 つの同じイベントがプッシュされるだけのようです。セルを削除しない限り(deleteButtonが機能している場合)、別のセルをクリックしない限り、変更されません。次に、それを削除して別のものをクリックするまで、それは変更されません...など。

何が問題なのですか?オブジェクトの詳細を設定し、それを割り当てているためでしょうか。その後、彼らが反撃したときに、割り当てが解除されたことはありませんか、別のものをクリックしても詳細は変更されませんか? 申し訳ありませんが、目的の c を初めて使用します...

Tableview.m

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"Cell";
        // Configure the cell...
    WatchingCustomCell *cell = (WatchingCustomCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"WatchingCustomCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }
    PFObject *events = [self.watchingEvents objectAtIndex:indexPath.row];
    self.selectedEvent = events;


    cell.deleteButton.tag = indexPath.row;
    [[cell deleteButton] addTarget:self action:@selector(deleteButtonAction:) forControlEvents:UIControlEventTouchUpInside];

    //...
    cell.directionsButton.tag = indexPath.row;
    [[cell directionsButton] addTarget:self action:@selector(directionsButtonAction:) forControlEvents:UIControlEventTouchUpInside];

    return cell;
}
-(IBAction) deleteButtonAction:(id) sender
{
[SVProgressHUD showWithStatus:@"Removing from Watch List..."];

PFRelation *relation = [self.currentUser relationforKey:@"watching"];
[relation removeObject:self.selectedEvent];
[self.watchingEvents removeObject:self.selectedEvent];
[self.currentUser saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
    if (error)
    {
        NSString *errorString = [[error userInfo] objectForKey:@"error"];
        UIAlertView *errorAlertView = [[UIAlertView alloc] initWithTitle:@"Error" message:errorString delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [errorAlertView show];
    }
    else
    {
        [SVProgressHUD showSuccessWithStatus:@"Removed from Watch List!"];
        [self refreshTableView];
    }
}];
}

-(IBAction) directionsButtonAction:(id) sender
{
    DirectionsViewController *viewController = [[DirectionsViewController alloc] init];
    if (viewController != nil)
    {
        viewController.selectedEvent = self.selectedEvent;
    }
    [self presentViewController:viewController animated:YES completion:nil];
}

DirectionsViewController.m

- (void)viewDidLoad
{
  [super viewDidLoad];

   NSLog (@"%@", self.selectedEvent);
  // This isn't changing for some reason, unless the first cell that was selected was deleted, then another is clicked, and the chain continues. 

}
4

1 に答える 1

1

削除する:

    PFObject *events = [self.watchingEvents objectAtIndex:indexPath.row];
        self.selectedEvent = events;

cellForRowAtIndexPath から、このようにdirectionButtonActionに入れます

-(IBAction) directionsButtonAction:(id) sender
{
    DirectionsViewController *viewController = [[DirectionsViewController alloc] init];
    if (viewController != nil)
    {
        viewController.selectedEvent = [self.watchingEvents objectAtIndex:[sender tag]];
    }
    [self presentViewController:viewController animated:YES completion:nil];
}

この

 [[cell deleteButton] addTarget:self action:@selector(deleteButtonAction:) forControlEvents:UIControlEventTouchUpInside];

にある必要があります

 if (cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"WatchingCustomCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }

Rが作成したばかりのセルに対して毎回jusを実行したくないか、IBを介して実行したい場合、このコード行は必要ありません:)

于 2013-11-14T14:39:43.400 に答える