0

Apple のアドレス帳を使用して簡単な連絡先アプリを作成しています。開発者サイトで提供されているように、連絡先アプリを作成できました。しかし、削除機能に問題があります。削除用のコードを追加しました

[picker setValue:[NSNumber numberWithBool:YES] forKey:@"allowsDeletion"];

削除ボタンが表示されますが、削除をクリックしても応答しませんが、次回リロードすると連絡先が削除されます。私は検索しましたが、これに対する適切な解決策を見つけることができませんでした.誰もが同じ問題を抱えているようです.

現在、PeoplePickerNavigationController にスワイプ削除機能を追加する予定です。PeoplePickerNavigationController で連絡先をマークする方法に関するコードを見つけましたが、それは機能します。今、コードを微調整して削除機能のスワイプを追加しようとしていますが、実装に問題があります。削除時のスワイプのコードを変更するのを手伝ってもらえますか? これは、連絡先をクリックしたときにチェック マークを付けるコードです。削除時にスワイプするには、このイベントを置き換える必要があります。

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person{
UIView *view = peoplePicker.topViewController.view;
UITableView *tableView = nil;
for(UIView *uv in view.subviews)
{
    if([uv isKindOfClass:[UITableView class]])
    {
        tableView = (UITableView*)uv;
        break;
    }
}
if(tableView != nil)
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:[tableView indexPathForSelectedRow]];
    if(cell.accessoryType == UITableViewCellAccessoryNone){
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    }
    else{
        cell.accessoryType = UITableViewCellAccessoryNone;
    }        
    [cell setSelected:NO animated:YES];
}
return NO;
}

これは、削除ボタンをクリックしたときに呼び出されるように作成した関数ですが、機能する限り、独自の削除関数を追加できます。

-(void)deleteContct
{
    ABAddressBookRef addressBook= ABAddressBookCreate();
    ABAddressBookRemoveRecord(addressBook, (ABRecordRef)person,NULL);
    ABAddressBookSave(addressBook, NULL);

}
4

2 に答える 2

0

スワイプして削除できるようにするには、いくつかの TableView データソース メソッドが必要です。

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView
           editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
  return UITableViewCellEditingStyleDelete;
}

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
  return YES;
}

そして、実装- tableView:commitEditingStyle:forRowAtIndexPath:して確認editingStyle == UITableViewCellEditingStyleDeleteし、そこで削除する必要があります。

于 2013-08-05T22:51:34.880 に答える