UITableViewCell, scrolling zaman göstərir silmək düyməsini

UITableViewCell ə UITableViewCell zaman silmək düyməsini necə göstərmək olar? Tədbir heç vaxt yüksəlməz və silmək düyməsi heç vaxt görünmür.

512
22 июля '10 в 16:46 2010-07-22 16:46 The Learner 22 iyul 2010- cu il saat 4: 46-da 2010-07-22 16: 46-də soruşdu
@ 16 cavab
 // During startup (-viewDidLoad or in storyboard) do: self.tableView.allowsMultipleSelectionDuringEditing = NO; // Override to support conditional editing of the table view. // This only needs to be implemented if you are going to be returning NO // for some items. By default, all items are editable. - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { // Return YES if you 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) { //add code here for when you hit delete } } 
975
22 июля '10 в 17:09 2010-07-22 17:09 22 iyul 'da 17:09' da Kurbz'a cavab verdi 2010-07-22 17:09

Bu kod, çıxarmanın həyata keçirilməsini göstərir.

 #pragma mark - UITableViewDataSource // Swipe to delete. - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { [_chats removeObjectAtIndex:indexPath.row]; [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; } } 
border=0

Başlatma işlemini geçersiz kılmak isterseniz, Düzenle öğesini görüntülemek üçün aşağıdakı satırı əlavə edin:

 self.navigationItem.leftBarButtonItem = self.editButtonItem; 
66
10 нояб. Cavab verilir ma11hew28 10 noyabr. 2013-11-10 03:58 '13 at 03:58 2013-11-10 03:58

Bu cavab Swift 3'e yeniləndi.

Mən həmişə çox sadə, özünü büruzə verən bir nümunə olmağın yaxşı olduğunu düşünürəm, yeni bir vəzifə öyrənərkən heç bir şey qəbul edilmir. Bu cavab, UITableView satırlarını UITableView . Layihə belədir:

2019

09 июня '16 в 10:31 2016-06-09 10:31 Cavab Suragch tərəfindən 09 iyun '16' da 10:31 2016-06-09 10:31 'də verilir

Qeyd Kurbz cavabında bir şərh göndərmək üçün kifayət qədər etibar etmirəm.

Kurbesdən gələn cavab düzgündür. Amma mənim üçün heç bir iş görməmişdi.

Bəzi istintaqdan sonra siqnalın silinməsi masa görünüşünü redaktə etmədikdə baş verir. .

Mən bunu açıq şəkildə ifadə etməmişəm. Səhv etmirəmsə, işləməyə başqa bir yol tapmadım.

Düzəliş edərkən silmək və / və ya yenidən sırala nəzarət görünəcək.

32
20 янв. Cavab GenesisST yanvar 20-də verilir 2013-01-20 17:18 '13 'da 17:18' də 2013-01-20 17:18

Mən yalnız bir problemi həll etdim, buna görə də bunu paylaşıram, çünki kimsə kömək edə bilər.

Bir UITableView və silinəcək fayl silmək üçün göstərilən əlavə üsulları var:

 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { // Return YES if you 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) { //add code here for when you hit delete } } 

Mənə dəyişdirmə rejimində masa qoymaq və çox funksiyanı aktivləşdirməyə imkan verən bir yeniləmə üzərində işləyirəm. Bunun üçün Apple TableMultiSelect kodunu əlavə etdim . Bu işi aldığım anda, silmək funksiyamın işini dayandırdığını gördüm.

Göründüyü kimi, aşağıdakı satırı əlavə etmək problem oldu:

 self.tableView.allowsMultipleSelectionDuringEditing = YES; 

Bu xəttdən istifadə edərək, çox seqment işləyəcək, ancaq silmək mümkün deyil. Xətt olmadan başqa bir yol idi.

Düzəliş:

ViewController üçün aşağıdakı metodu əlavə edin:

 - (void)setEditing:(BOOL)editing animated:(BOOL)animated { self.tableView.allowsMultipleSelectionDuringEditing = editing; [super setEditing:editing animated:animated]; } 

Sonra, düzəliş rejimində masa qoyan metodunuzda (məsələn, bir düyməyə basaraq) istifadə etməlisiniz:

 [self setEditing:YES animated:YES]; 

əvəzinə:

 [self.tableView setEditing:YES animated:YES]; 

Bu çox funksiyanı yalnız masa düzəliş rejimində olduqda aktivləşdirmək deməkdir.

22
25 окт. Leon oktyabrın 25-ə cevap verdi. 2013-10-25 18:19 '13 at 18:19 2013-10-25 18:19

Aşağıda UITableViewDataSource silinmiş silmək üçün sizə kömək edəcək

 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { // Return YES if you want the specified item to be editable. return YES; } - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { [arrYears removeObjectAtIndex:indexPath.row]; [tableView reloadData]; } } 

arrips NSMutableArray və sonra tableView yenidən yüklənir

Swift

  func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool { return true } func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { if editingStyle == UITableViewCellEditingStyleDelete { arrYears.removeObjectAtIndex(indexPath.row) tableView.reloadData() } } 
16
26 нояб. İAnkit tərəfindən verilmiş cavab 26 noyabr 2014-11-26 10:36 '14 at 10:36 AM 2014-11-26 10:36

İOS 8 və Swift 2.0-da,

 override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool { // let the controller to know that able to edit tableView row return true } override func tableView(tableView: UITableView, commitEdittingStyle editingStyle UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { // if you want to apply with iOS 8 or earlier version you must add this function too. (just left in blank code) } override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? { // add the action button you want to show when swiping on tableView cell , in this case add the delete button. let deleteAction = UITableViewRowAction(style: .Default, title: "Delete", handler: { (action , indexPath) -> Void in // Your delete code here..... ......... ......... }) // You can set its properties like normal button deleteAction.backgroundColor = UIColor.redColor() return [deleteAction] } 
16
08 июля '15 в 19:06 2015-07-08 19:06 cavab Masa S-AiYa verildi 08 iyul 2015, 19:06

@ Kurbzin cavabı inanılmaz, amma bu qeydini buraxmaq istəyirəm və ümid edirəm ki, bu cavab insanlar üçün bir müddət saxlaya bilər.

Bəzən mənim nəzarətçimdə bu xətləri çəkdim və təmizləyici funksiya ilə işləmirdilər.

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

Düzenleme stili olaraq UITableViewCellEditingStyleInsert və ya UITableViewCellEditingStyleNone istifadə UITableViewCellEditingStyleInsert , kaydırma funksiyası işləmir. Yalnız UITableViewCellEditingStyleDelete , u mənim stil olan istifadə edə bilərsiniz.

9
06 янв. Cavab Brian 06 jan verilir . 2015-01-06 19:10 '15 at 19:10 2015-01-06 19:10

Swift 3

Bütün lazım olanlar aşağıdakı iki funksiyanı təmin edir:

 func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { return true } func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { if editingStyle == UITableViewCellEditingStyle.delete { tableView.reloadData() } } 
7
19 дек. cavab verildi Machado 19 Dek. 2016-12-19 19:34 '16 'da 19:34' də 2016-12-19 19:34 'da

Bununla yanaşı, SWIFT-də aşağıdakı üsulla istifadə edilə bilər

 func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { if (editingStyle == UITableViewCellEditingStyle.Delete){ testArray.removeAtIndex(indexPath.row) goalsTableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic) } } 
7
06 февр. cavab 06 fevralda DrPatience tərəfindən verilir. 2015-02-06 12:54 '15 at 12:54 2015-02-06 12:54

Sehrli görünüşünüzdə bir hüceyrəni sildiyinizdə index x ilə bir sıra obyektini silmək lazımdır.

Hesab edirəm ki, bir çalmak jestini istifadə edə bilərsiniz. Cədvəl görünüşü nümayəndələri çağırır:

 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { //add code here for when you hit delete [dataSourceArray removeObjectAtIndex:indexPath.row]; } } 

Obyekt çıxarıldıqdan sonra. Cədvəldən istifadə edərək yenidən başlamalısınız. Koda aşağıdakı satırı əlavə edin:

 [tableView reloadData]; 

Bundan sonra simli uğurla sildiniz. Görünüşü yenidən yüklədiyinizdə və ya DataSource verilənlərinizi əlavə etdikdə, obyekt artıq olmayacaq.

Hər kəs üçün, Kurbzdan gələn cavab düzgündür.

Yalnız bir şeyin DataSource dizisindən çıxarılmasını istəyirsinizsə, nümayəndə funksiyasının kifayət etməyəcəyini xatırlatmaq istərdim.

Ümid edirəm sizə kömək edirəm.

5
25 марта '13 в 21:36 2013-03-25 21:36 Cavab Robybyte tərəfindən 25 Mart 2013 , saat 21:36 'də verilir. 2013-03-25 21:36
 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { //add code here for when you hit delete [dataSourceArray removeObjectAtIndex:indexPath.row]; [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; } } 
5
07 нояб. Cavab Rahulkr 07 noyabrda verilir. 2014-11-07 09:38 '14 at 09:38 AM 2014-11-07 09:38

Mən köhnə sualımı bilirəm, amma @Kurbz cavabına yalnız Xcode 6.3.2 və SDK 8.3 üçün lazımdır

[TableView startUpdates] və [tableView endUpdates] əlavə etməliyəm (təşəkkür @ bay.phillips burada )

 // Override to support editing the table view. - (void)tableView:(UITableView *)tableView commitEditingStyle: (UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { // Open "Transaction" [tableView beginUpdates]; if (editingStyle == UITableViewCellEditingStyleDelete) { // your code goes here //add code here for when you hit delete [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; } // Close "Transaction" [tableView endUpdates]; } 
5
21 мая '15 в 23:49 2015-05-21 23:49 Cavab Beto 21 may, 23 saat 23:49 2015-05-21 23:49 verilir

Swift 4

 func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? { let delete = UITableViewRowAction(style: .destructive, title: "delete") { (action, indexPath) in // delete item at indexPath tableView.deleteRows(at: [indexPath], with: .fade) } return [delete] } 
2
25 окт. Cavab oktyabrın 25-də Pratik Lad-a verilir . 2017-10-25 13:45 '17 saat 13:45 'də 2017-10-25 13:45

Swift 2.2:

 override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool { return true } override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? { let delete = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "DELETE"){(UITableViewRowAction,NSIndexPath) -> Void in print("Your action when user pressed delete") } let edit = UITableViewRowAction(style: UITableViewRowActionStyle.Normal, title: "EDIT"){(UITableViewRowAction,NSIndexPath) -> Void in print("Your action when user pressed edit") } return [delete, block] } 
1
04 марта '16 в 17:32 2016-03-04 17:32 Cavab lcl 04 mart '16 saat 17:32 'də verilir 2016-03-04 17:32

Swift üçün bu kodu yazın.

 func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { if editingStyle == .Delete { print("Delete Hit") } } 

C obyektiv üçün bu kodu yazın.

 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { NSLog(@"index: %@",indexPath.row); } } 
1
26 июля '16 в 13:52 2016-07-26 13:52 cavab KiranJasvanee tərəfindən 26 iyul '16 'da saat 13:52' də verilir. 2016-07-26 13:52