2012-07-26 72 views
2

我正在嘗試訪問QuickDialog窗體的UITableViewCell的屬性。如何訪問QuickDialog單元格元素的UITableViewCell?

更具體地說,我試圖訪問QEntryElement(QDateTimeInlineElement)的accessoryView屬性,該屬性在我創建的對象的屬性列表中「隱藏」。

我試圖訪問使用

UITableViewCell *thisCell = [dateelement getCellForTableView:self.quickDialogTableView controller:self]; 

細胞,但由於某些原因不顯示任何內容。我想在這上面插入一個UIButton,像這樣:

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
[button setTitle:@"=" forState:UIControlStateNormal]; 
button.frame = CGRectMake(0, 0, 24, 24); 

然後 thisCell.accessoryView =按鈕;

我是否以錯誤的方式訪問屬性,或者可能沒有創建按鈕?沒有錯誤顯示,但accessoryView是空的。

預先感謝您

+0

你不能只調用[element getCellForTableView],因爲直到tableview試圖顯示它們,單元才真正存在。這是UITableView用來顯示數據的表示模型。 – 2012-07-27 14:04:09

回答

2

This issue看起來非常接近你的要求。基本上,你首先要提供自己的QuickDialogStyleProvider,實現cell:willAppearForElement:atIndexPath:方法escoz的方式表明有:

一旦你在供應商的方法調用,您有電池的完全控制。您可以檢查單元格是否爲QEntryTableViewCell,如果是,則轉換爲該類型並更改textField屬性的顏色/字體。一個很好的副作用是,這也將改變顏色的所有子類,如單選按鈕,日期/時間字段,等等。

所以,你的情況,你會做這樣的事情

- (void)viewDidLoad 
{ 
    self.quickDialogTableView.styleProvider = self; 
} 

- (void)cell:(UITableViewCell *)cell willAppearForElement:(QElement *)element atIndexPath:(NSIndexPath *)indexPath 
{ 
    if([cell isKindOfClass:[QDateTimeInlineElement class]]) 
    { 
     UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
     [button setTitle:@"=" forState:UIControlStateNormal]; 
     button.frame = CGRectMake(0, 0, 24, 24); 

     cell.accessoryView = button; 
    } 
} 

對不起,如果它不完全正確,我現在遠離Xcode。

+0

偉大的答案@Gregory Goltsov。一般來說,這也是我會做的。 – 2012-07-27 14:02:05

+1

它確實是完全正確的。 我在'viewDidLoad'方法中添加了''頭文件和'self.quickDialogTableView.styleProvider = self;' 。現在我可以自定義我的AccessoryView。通過這樣做,controllerAccessoryAction不再工作了,所以我向按鈕本身添加了[button addTarget:...]。 任何有關如何編輯此問題線程以改進它的建議都是值得歡迎的! – maggix 2012-07-27 14:56:29

+0

@maggix我已更新該問題以反映您的評論。它幫助我(我把代理線放在init方法中)。 – Amir 2013-04-11 12:49:44