iPad,在viewForHeaderInSection中调整自定义按钮

时间:2011-10-05 09:12:04

标签: ios ipad uitableview uibutton

我的应用程序有splitview,它仅在横向模式下激活。 在masterview我有tableview,在最后一节我有一个自定义按钮。 问题是按钮宽度保持在potrait而不是使用设备方向。 我试图在按钮和视图上使用setAutoresizingMask,但这也不起作用。

- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger) sectionNum {
    if (sectionNum == 4) {
        CGRect frameSize;

        if (UIInterfaceOrientationIsLandscape([[UIDevice currentDevice] orientation])) {
            frameSize = CGRectMake(45.0, 0.0, 600.0, 44.0);
        } else {
            frameSize = CGRectMake(45.0, 0.0, 680.0, 44.0);
        }

        UIView *btnView = [[[UIView alloc] initWithFrame:frameSize] autorelease];

        // button
        UIButton* btnFind = [UIButton buttonWithType:UIButtonTypeCustom];
        [btnFind setBackgroundImage:[[UIImage imageNamed:@"buttonblue.png"] stretchableImageWithLeftCapWidth:14.0 topCapHeight:0.0] forState:UIControlStateNormal];
        [btnFind setBackgroundImage:[[UIImage imageNamed:@"buttonred.png"] stretchableImageWithLeftCapWidth:14.0 topCapHeight:0.0] forState:UIControlStateHighlighted];

        btnFind.frame = frameSize;
        btnFind.tag = 1;

        [btnFind setTitle:@"Find" forState:UIControlStateNormal];
        [btnFind addTarget:self action:@selector(doSearchDoc:) forControlEvents:UIControlEventTouchUpInside];
        //[btnFind setAutoresizingMask:UIViewAutoresizingFlexibleRightMargin];

        //[btnView setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
        [btnView addSubview:btnFind];

        return btnView;
    }

    return nil;
}

有人可以告诉我如何解决此问题。

感谢。

1 个答案:

答案 0 :(得分:1)

我有其他问题,在旋转设备时标题没有刷新,即。在我的情况中没有调用上面的方法,你可以检查是否也是这种情况。 我采用的解决方案是在旋转方法中调用reloadData:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    // This solves an issue that the header doesn't show when roating device (ok on simulator)
    NSIndexPath* ipselected = [self.tableView indexPathForSelectedRow];
    [self.tableView reloadData];
    [self.tableView selectRowAtIndexPath:ipselected animated:false scrollPosition:UITableViewScrollPositionMiddle];
}

当然,如果您在旋转设备时能够承受全部重新加载,那么它是可用的,但通常是用户在忙于移动设备时更好地接受0.5秒延迟的时间。

或者你可以在你的按钮上保留一个ivar并用上面的方法改变它的框架。