2012-07-26 83 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