在SBTableAlert中设置按钮位置

时间:2013-09-27 05:26:47

标签: ios xcode ios7 uialertview cgrect

我在我的应用程序中使用了SBTableAlert库,但是对于iOS 7,这个库将不起作用。 我修复它添加TSAlertView和对话框显示正常。 但我的问题是按钮的位置不是应该的。

我将按钮的位置设置为:

-(void)willPresentTableAlert:(SBTableAlert *)tableAlert{
    int counter = 0;
    for (id view_sub in self.filterAlert.view.subviews) {
        if ([view_sub isKindOfClass:[UIButton class]]) {
            switch (counter) {
                case 0:
                    ((UIButton*)view_sub).frame = CGRectMake(10,
                                                       10,
                                                       144,
                                                       44);
                    ((UIButton*)view_sub).backgroundColor = [UIColor redColor];
                    break;
                case 1:
                    ((UIButton*)view_sub).frame = CGRectMake(169,
                                                                     150,
                                                                     144,
                                                                     44);
                    break;
                case 2:
                    ((UIButton*)view_sub).frame = CGRectMake(328,
                                                                     150,
                                                                     144,
                                                                     44);
                    break;

                default:
                    break;
            }
            counter++;
        }
    }
}

问题是按钮被涂成红色但是框架集被忽略,而不是在一行中排列,它们被放在另一行之下并且不在Alert框架中。

1 个答案:

答案 0 :(得分:0)

我终于找到了答案。 问题出在TSAlertVeiw库中,因为它具有函数recalcSizeAndLayout:在最后调用的布局并覆盖按钮的自定义位置。

解决方案是在TSAlertView customLayoutOfButton中添加新的BOOL变量,然后在自动布局按钮之前检查它:

if (!self.customLayoutOfButton) {
        CGFloat buttonHeight = [[self.buttons objectAtIndex:0] sizeThatFits: CGSizeZero].height;
        if ( stacked )
        {
            CGFloat buttonWidth = maxWidth;
            for ( UIButton* b in self.buttons )
            {
                b.frame = CGRectMake( kTSAlertView_LeftMargin, y, buttonWidth, buttonHeight );
                y += buttonHeight + kTSAlertView_RowMargin;
            }

        }
        else
        {
            CGFloat buttonWidth = (maxWidth - kTSAlertView_ColumnMargin) / 2.0;
            CGFloat x = kTSAlertView_LeftMargin;
            for ( UIButton* b in self.buttons )
            {
                b.frame = CGRectMake( x, y, buttonWidth, buttonHeight );
                x += buttonWidth + kTSAlertView_ColumnMargin;
            }
        }
}