2010-02-09 59 views
2

我玩弄移動uitableviewcells,以任何理由,editingStyleForRowAtIndexPath是沒有得到所謂的(所以刪除按鈕被顯示出來)

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView 
      editingstyleForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return UITableViewCellEditingStyleNone; //<-- bp set on it 
} 

是沒有得到所謂的(我給自己定一個斷點) - 所以表格顯示刪除選項,但我不想那樣。這是我的實現:

@implementation MoveItController 
@synthesize mList; 

- (IBAction)moveButton 
{ 
    [self.tableView setEditing:!self.tableView.editing animated:YES]; 

    [self.navigationItem.rightBarButtonItem setTitle:(self.tableView.editing)? @"Done" : @"Move"]; 
} 

- (void)viewDidLoad 
{ 
    if (mList == nil) 
    { 
     mList = [[NSMutableArray alloc] initWithObjects:@"$1", @"$2", @"$5", @"$10", @"$20", @"$50", @"$100", nil]; 
    } 

    UIBarButtonItem *mvButton = [[UIBarButtonItem alloc] 
           initWithTitle:@"Move" 
           style:UIBarButtonItemStyleBordered 
           target:self 
           action:@selector(moveButton)]; 
    self.navigationItem.rightBarButtonItem = mvButton; 
    [mvButton release]; 
    [super viewDidLoad]; 
} 

// Table datasource methods 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [mList count]; 
} 

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


    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:moveItCellId]; 
    if (cell == nil) 
    { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:moveItCellId] autorelease]; 
     cell.showsReorderControl = YES; 
    } 

    cell.textLabel.text = [mList objectAtIndex:[indexPath row]]; 
    return cell; 
} 

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

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

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath 
toIndexPath:(NSIndexPath *)toIndexPath 
{ 
    id object = [[mList objectAtIndex:[fromIndexPath row]] retain]; 
    [mList removeObjectAtIndex:[fromIndexPath row]]; 
    [mList insertObject:object atIndex:[toIndexPath row]]; 
    [object release];     
} 

- (void) dealloc 
{ 
    [mList release]; 
    [super dealloc]; 
} 

@end 

在編譯時沒有警告。

謝謝!

回答

2

嘗試資本的方法名稱正確

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView 
      editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 

,隨着editingStyleForRowAtIndexPathS的資本。 ObjC選擇器區分大小寫。表視圖不認爲它的代表響應您嘗試提供返回值的方法。

+0

媽 - 我喜歡特里普爾檢查了!哈哈謝謝。我希望xcode發出警告,就像我認爲它通常那樣的類似方法簽名一樣。 +1謝謝。 – 2010-02-09 03:25:41

0

不調用editStyleForRowAtIndexPath(和其他委託)的另一個原因是如果控件沒有將它的委託出口連接到文件的所有者。

是的,這很明顯,但很容易被忽視。

4

您需要多次選擇設置爲NO在編輯模式

self.tableview.allowsMultipleSelectionDuringEditing = NO; 
1

另一個原因可能是,你還需要實現

- (void)tableView:(UITableView *)tableView 
    commitEditingStyle:(UITableViewCellEditingStyle)editingStyle 
    forRowAtIndexPath:(NSIndexPath *)indexPath 
+0

這是我的問題:..當你刪除這個方法('commitEditingStyle'),然後在'editingStyleForRowAtIndexPath'中放置一個斷點時,它將不會再被調用,並且默認的編輯風格變爲無 – matrix4use 2015-09-22 23:45:14