2011-10-27 46 views
9

我一直在嘗試學習Xcode中的新Storyboard功能,並且遇到了嘗試將UITableView設置爲編輯模式的問題。iPhone Storyboard編輯表格視圖

到目前爲止,我的故事板是這樣的:

NavigationController - >的UIViewController(與實現代碼如下屬性的子類)

我添加了一個導航項目和欄按鈕項目視圖控制器一幕,讓我看到一個編輯按鈕。它沒有自動執行任何操作,所以我嘗試將選擇器鏈接到tableview委託的setEditing方法。這確實將其置於編輯模式。但是,編輯按鈕不會更改爲「完成」按鈕,因此無法退出編輯模式。

是否必須爲完成按鈕創建另一個導航項目?我如何連接它,以便它在正確的時間出現並正常工作?

回答

13

我只是用故事板開始,所以我也想用故事板加我的編輯按鈕。花時間學習如何使用新工具,但發現需要一卷膠帶來修補這些孔是令人討厭的。

你可以得到它的工作,但需要添加一個自定義按鈕。在屬性檢查器中確保標識符是自定義的,標題是編輯。

然後加入這樣的事情在您的m

- (IBAction)setEditMode:(UIBarButtonItem *)sender { 
    if (self.editing) { 
     sender.title = @"Edit"; 
     [super setEditing:NO animated:YES]; 
    } else { 
     sender.title = @"Done"; 
     [super setEditing:YES animated:YES]; 
    } 
} 

讓你的自定義編輯按鈕來調用setEditMode方法。

只能希望他們將在未來的故事板編輯器中修復Edit按鈕的實現。

5

如果您使用導航控制器推送到視圖控制器,只需設置self.navigationItem.rightBarButtonItem = self.editButtonItem;,這會將默認編輯按鈕置於右側。如果導航欄不可見,請致電self.navigationController.navigationBarHidden = NO;。那些將在viewDidLoad方法或類似的東西中被調用。然後爲了讓tableView響應編輯調用,使用下面的方法:

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

這應該做你想做的事情。如果你有任何問題,請告訴我們,我們可以縮小細節

+1

是的,我知道如何以編程方式完成它,但我一直試圖通過Storyboar完成它d UI。 – markplee

+0

它應該幾乎相同。我也一直在使用Storyboard UI(我必須說,這讓生活變得更容易),並且必須做類似的事情,這就是我如何去做的。我注意到有時你必須通過'self.parentViewController.navigationItem.rightBarButtonItem = yourButton;'有時候才能在你的層次中獲得所需的視圖。但其餘的應該保持不變,只要你的tableView作爲IBOutlet鏈接到viewController – justin

+0

有什麼消息嗎?試圖找出如何用新的故事板功能替換一個LOC。只需將一個按鈕放入導航欄並將其命名爲「編輯」當然不起作用。 ;) –

27

我認爲這也與故事板,唯一的辦法(肯定的,最簡單的一個)來實現工作編輯/完成按鈕,是使用下面的代碼:

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
... 
//set the edit button 
self.navigationItem.leftBarButtonItem = self.editButtonItem; 
... 

這是,如果你選擇你的項目的「主從應用程序」模板,蘋果本身實現的解決方案。

大概故事板還不夠完善,希望它會從蘋果在下一版本中改進...

6

總結:

的按鈕,通過UIViewController.editButtonItem返回是,如果按調用- (void)setEditing:(BOOL)editing animated:(BOOL)animated特殊行爲的一種特殊的撥動按鈕。

按鈕,返回UINavigationController.editButtonItem是一個簡單的按鈕,只是標有「編輯」。

故事板允許選擇後者。

1

可以使用啞巴,不工作編輯按鈕從故事板編輯器,然後以編程方式替換它與UIViewController.editButtonItem

在viewDidLoad中

NSMutableArray *toolbarItems = [NSMutableArray arrayWithArray:self.toolbarItems]; 

[toolbarItems replaceObjectAtIndex:0 withObject:self.editButtonItem]; 

[self setToolbarItems:toolbarItems];  

這個代碼假定一個已經添加了啞編輯按鈕,在故事板工具欄上最左邊的項目。

+0

這有點不好意思,但最好重新實現編輯按鈕。 – SeanR

+0

這有什麼好玩的嗎?謝謝 – kitschmaster

+0

使用代碼替換您在Interface Builder中添加的按鈕,它實際上應該看起來有點像黑客......但這是蘋果方面的一個缺點,迫使我們這樣做。不要誤解我的意思,我認爲這是Apple支持Interface Builder中實際編輯按鈕的最佳解決方案。 – SeanR

2

要添加到@Graham答案,您可能還需要更改樣式,以便您可以具有「完成」按鈕樣式(藍色)。類似這樣的:

- (IBAction)setEditMode:(UIBarButtonItem *)sender { 
    if (self.editing) { 
     sender.title = @"Edit"; 
     sender.style = UIBarButtonItemStylePlain; 
     [super setEditing:NO animated:YES]; 
    } else { 
     sender.title = @"Done"; 
     sender.style = UIBarButtonItemStyleDone; 
     [super setEditing:YES animated:YES]; 
    } 
} 
1

如果你有UIViewController並且在這裏面你添加了一個UITableVIew。 如果你想以與UITableView的互動添加編輯UIBarButton,嘗試:

加入這一行...

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    ... 

    self.navigationItem.leftBarButtonItem = self.editButtonItem; 

    ... 
} 

而且這種方法

- (void)setEditing:(BOOL)editing animated:(BOOL)animated { 

    [super setEditing:editing animated:animated]; 
    [self.myListTableView setEditing:editing animated:animated]; 

    if(self.myListTableView.editing) { 
     NSLog(@"editMode on"); 
    } else { 
     NSLog(@"editMode off"); 
    } 
} 

其中

@property (weak, nonatomic) IBOutlet UITableView *myListTableView;