2013-09-28 204 views
13

Sau khi tìm kiếm khá nhiều trên Google, tài liệu về Stackoverflow và táo, tôi gần như đã từ bỏ.Nút xóa hàng trùng lặp mục lục UITableView Mục

Tôi đang tạo một ứng dụng để lập chỉ mục người tiêu dùng và vì danh sách có khả năng rất dài, tôi sử dụng chỉ mục phần để điều hướng nhanh hơn. Vấn đề của tôi được thể hiện trong hình dưới đây.

http://i.stack.imgur.com/i2tTx.png

Khi tôi kéo một mục để lộ nút delete, nó là một phần ẩn bên dưới thanh chỉ số phần của tôi.

Tôi không có thiết lập mã xem bảng hoặc chiều rộng tableviewcells và chỉ mục phần thực sự không thể thay đổi, theo như tôi quan tâm.

EDIT:

Câu hỏi đặt ra là làm thế nào tôi có thể có các tế bào tableview kết thúc trước khi họ nhận được chồng chéo, do đó nút delete là hoàn toàn có thể nhìn thấy.

CHỈNH SỬA 2:

Tôi đã thử đặt khung tế bào nhỏ hơn mà không có bất kỳ may mắn nào.

cell.frame = CGRectMake(cell.frame.origin.x, cell.frame.origin.y, cell.frame.size.width-30, cell.frame.size.height); 

Tôi cũng đã thử tương tự với tableview, nhưng vì nó nằm trong UITableViewController nên không thể thay đổi kích thước.

self.tableView.frame = CGRectMake(self.tableView.frame.origin.x, self.tableView.frame.origin.y, self.tableView.frame.size.width-30, self.tableView.frame.size.height); 
+0

... Vì vậy, bạn có yêu cầu như thế nào chiều rộng của thanh chỉ số phần có thể được thay đổi? Làm thế nào để di chuyển nút xóa để nó không được che đậy? Bạn chỉ cần nêu rõ vấn đề, không có câu hỏi nào –

+0

Tôi đã thêm một câu hỏi cụ thể hơn ngay bây giờ. Bây giờ ý định của tôi đã rõ ràng hơn chưa? – Stjernegard

+0

Có thể http://i.stack.imgur.com/scNRZ.jpg –

Trả lời

10

Như một công việc đơn giản, chúng tôi đã giải quyết sự chồng chéo hình ảnh của chỉ mục bằng cách đặt màu nền của chỉ mục thành clearColor.

self.tableView.sectionIndexBackgroundColor = [UIColor clearColor]; 

* Điều này có vẻ trực quan hơn, nhưng chỉ mục sẽ vẫn chồng lên bảngViewView của bạn.

Một công việc xung quanh có thể sẽ được ẩn thanh chỉ số khi nhập chế độ chỉnh sửa:

// allow editing 
[self.tableView setEditing:YES animated:YES]; 
// hides the index 
self.tableView.sectionIndexMinimumDisplayRowCount = NSIntegerMax; 
+2

Tạo báo cáo lỗi cho Apple. Cho đến khi nó được cố định, điều này phải làm. – Stjernegard

+0

Nó sẽ không hoạt động với cả IOS-6 và IOS-7. – chandan

+1

Chỉ cần thêm mã có điều kiện cho iOS 7. Tìm kiếm SO nhanh chóng sẽ bật lên nhiều cách để phát hiện phiên bản iOS. –

6

Phương pháp inEditMode nên làm các trick. Dưới đây tôi nhúng một mã hoàn chỉnh để ẩn chỉ mục trong khi chỉnh sửa và hiển thị lại khi chỉnh sửa xong.

-(void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath{ 
    [self inEditMode:YES]; 
} 

-(void)tableView:(UITableView *)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath{ 
    [self inEditMode:NO]; 
} 
//on self.editButtonItem click 
-(void)setEditing:(BOOL)editing animated:(BOOL)animated{ 
    [super setEditing:editing animated:animated]; 
    [self inEditMode:editing]; 
} 

-(void)inEditMode:(BOOL)inEditMode{ 
    if (inEditMode) { //hide index while in edit mode 
     self.tableView.sectionIndexMinimumDisplayRowCount = NSIntegerMax; 
    }else{ 
     self.tableView.sectionIndexMinimumDisplayRowCount = NSIntegerMin; 
    } 
    [self.tableView reloadSectionIndexTitles]; 
} 
0

Chỉ Sử dụng mã này trước khi phân bổ bất kỳ subview trong cellForRowAtIndexPath

for (id object in cell.contentView.subviews) 
{ 
    [object removeFromSuperview]; 
}