在tableview行中偏移UIButton帧

时间:2011-04-17 02:04:53

标签: iphone ios4 uitableview uibutton

在我的cellForRowAtIndexPath方法中,我想动态创建一些按钮并将它们放在单元格中。我遇到的问题是sizeToFit方法总是将x坐标放在0位置。有没有办法抵消位置,把它放在上一个按钮旁边?

而不是:Desired effect。我明白了:Not desired

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {


UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"cell"];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
                                   reuseIdentifier:@"cell"] autorelease];
    cell.accessoryType = UITableViewCellAccessoryNone;

    if ([indexPath section] == 0) {
        UIButton *buttonClean = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        [buttonClean addTarget:self 
                   action:@selector(aMethod:)
         forControlEvents:UIControlEventTouchDown];
        [buttonClean setTitle:@"Clean Cup" forState:UIControlStateNormal];
        [buttonClean sizeToFit];
        [cell addSubview:buttonClean];

        UIButton *buttonAroma = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        [buttonAroma addTarget:self 
                   action:@selector(aMethod:)
         forControlEvents:UIControlEventTouchDown];
        [buttonAroma setTitle:@"Aroma" forState:UIControlStateNormal];
        [buttonAroma sizeToFit];
        [cell addSubview:buttonAroma];

2 个答案:

答案 0 :(得分:1)

您应该通过设置 frame 属性来定位UIViews。

这是一个选项:

[buttonAroma setFrame:CGRectMake(buttonClean.frame.size.width,0,buttonAroma.frame.size.width,buttonAroma.frame.size.height)];

您还应该将您的观点添加到单元格的 contentView ,而不是直接将它们添加到单元格中:

[cell.contentView addSubview:buttonAroma];

请在此处查看UIView的 frame 属性:

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/instp/UIView/frame

请在此处查看UITableViewCell的 contentView 属性:

http://developer.apple.com/library/ios/documentation/uikit/reference/UITableViewCell_Class/Reference/Reference.html#//apple_ref/occ/instp/UITableViewCell/contentView

..它说:

  

如果您想通过自定义单元格   只需添加其他视图即可   应该将它们添加到内容视图中   他们将适当地定位   当细胞过渡进出   编辑模式。

答案 1 :(得分:0)

这不是sizeToFit方法将它们置于y = 0,而是你从未设置任何其他位置的事实。您可以通过分配其centerframe属性来移动每个按钮;对于后者,您当然希望读出属性,仅修改CGRect的原点,并将其设置回属性,以免弄乱大小。