2010-12-23 87 views
2

我想把一個按鈕放到TableView的頁腳上。在iPhone中使用圓形矩形按鈕用於TableView頁腳?

這就是我所做的,我看不到按鈕,但顯示字符串「RESULT」。

我試過了我能想到的一切。但我無法弄清楚什麼是錯的。我需要你幫忙!

- (void)viewDidLoad { 
btnSeeResult = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[btnSeeResult setTitle:@"RESULT" forState:UIControlStateNormal]; 

viewResult = [[UIView alloc] initWithFrame:btnSeeResult.frame]; 
[viewResult addSubview:btnSeeResult]; 

self.tableView.tableFooterView = btnSeeResult; 
} 

-(CGFloat) tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{ 
    return viewResult.bounds.size.height; 
} 

總之,什麼是直接設置像

tableView.tableFooterView = footerView; 

頁腳視圖,並使用(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section方法之間的區別?

回答

2

沒有理由viewResult包裝。一個UIButton是一個UIView,所以在這種情況下沒有理由將它包裝在另一個UIView中 - 尤其是當你將按鈕分配給表的footer屬性時,這意味着表應該控制按鈕視圖最終顯示的方式和時間。

您可能必須設置btnSeeResult的框架,以便設置高度。在這種情況下,默認情況下高度爲0,因爲您從未設置過框架。至少在設置標題時,您可能還會嘗試諸如[btnSeeResult sizeToFit];之類的東西,該標題應將其調整爲足以爲標籤文本騰出空間。

至於第二個問題,tableFooterView-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section之間的區別在於前者定義了一個視圖來附加到整個表格的底部,而委託方法允許您爲表格中的每個子部分提供不同的頁腳。兩者都可以在同一時間使用,在這種情況下,最後一部分的頁腳視圖會出現在tableFooterView的最後。

+0

非常感謝您的回答。在我調用sizeToFit方法後,顯示按鈕。但它的高度完全適合它的字符串,但按鈕會一直拖到左側和右側。我該怎麼辦?該死的我花了幾天的時間用這個按鈕! – SeniorLee 2010-12-25 13:58:51

0

SeniorLee,

歡迎來到StackOverflow!

你有你的問題正確的答案 - 是後者代碼:

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section 

當表視圖去構建你的表,它調用回2班 - 表的委託,和表的數據源。

數據源正是名稱所暗示的 - 表中數據的來源。另一方面,委託處理與表格的實時交互以及如何顯示它(例如,當行被按下時會發生什麼?)。

在很多情況下,程序員都將表視圖的Data Source和Delegate設置爲同一個類 - 擁有表視圖的UITableViewController。

總之,關於你的問題:

這是極有可能的是,直接分配沒有明確的工作,因爲有一個委託回調。當表格視圖出現時,它會要求它的代表「你對x部分的頁腳有什麼看法?」。這是上面的方法。

如果您沒有實現該方法,表視圖將會有一個默認的實現來執行某些操作 - 在這種情況下,可能會將其設置爲零。

所以,我的猜測是,即使您直接在viewDidLoad中設置此屬性,它將被表視圖覆蓋爲nil,因爲您沒有實現委託回調。相反,將您的視圖代碼移到回調方法,它應該很好地工作。另外,我不認爲你需要將UIButton包裝在UIView中 - UIButton是UIView的子類,因此應該工作得很好。

+0

非常感謝你;)你的回答真的很有幫助! – SeniorLee 2010-12-24 16:20:16