弹出框内的iOS 7 UITableView

Posted

技术标签:

【中文标题】弹出框内的iOS 7 UITableView【英文标题】:iOS 7 UITableView inside a popover 【发布时间】:2013-12-02 07:42:53 【问题描述】:

我有一个 UITableView,它有一些自定义样式。此表格视图出现在应用程序的两个位置,其中一个位于 UIPopoverController 内。但是,当 tableview 在弹出框内时,它会采用默认的 tableview 样式,如“弹出框”下的UI Transition Guide 中所述。

我遇到的问题是似乎没有地方可以改变这种行为。无论我在哪里尝试修改 tableview 的属性,popover 内的视图都不会改变。

有人处理过这个问题或者有什么想法吗?

这是我创建表格视图的 LibraryProductView 的 init 方法:

- (id)initWithFrame:(CGRect)frame

    self = [super initWithFrame:frame];
    if (self) 
        self.sectionOrdering = [NSArray arrayWithObjects:
                                [NSNumber numberWithInt:LIBRARY_PRODUCT_SECTION_DESCRIPTION],
                                [NSNumber numberWithInt:LIBRARY_PRODUCT_SECTION_DOCUMENTS],
                                [NSNumber numberWithInt:LIBRARY_PRODUCT_SECTION_ACTIVE_INGREDIENTS],
                                [NSNumber numberWithInt:LIBRARY_PRODUCT_SECTION_RELATED_PRODUCTS],
                                [NSNumber numberWithInt:LIBRARY_PRODUCT_SECTION_RELATED_DOCUMENTS], nil];

        self.backgroundColor = [UIColor whiteColor];

        self.tableView = [[UITableView alloc] initWithFrame:CGRectInset(self.bounds, 10, 0) style:UITableViewStyleGrouped];
        self.tableView.backgroundColor = [UIColor whiteColor];
        self.tableView.dataSource = self;
        self.tableView.delegate = self;
        self.tableView.separatorColor = [UIColor clearColor];
        self.tableView.showsVerticalScrollIndicator = NO;

        [self addSubview:self.tableView];
    
    return self;

这里是将包含视图 (LibraryProductView) 添加到弹出框的位置:

- (IBAction)didTouchInformationButton:(id)sender

    if (_infoPopover != nil && _infoPopover.isPopoverVisible)
    
        [_infoPopover dismissPopoverAnimated:YES];
        return;
    

    CGSize preferredSize = CGSizeMake(600.0f, 500.0f);

    LibraryProductViewController* productController = [[[LibraryProductViewController alloc] initWithPreferredSize:preferredSize] autorelease];
    productController.filterByMyCompany = NO;
    productController.product = _activityInput.product;

    UINavigationController* nav = [[[UINavigationController alloc] initWithRootViewController:productController] autorelease];
    nav.title = _activityInput.product.name;

    RELEASE(_infoPopover);
    _infoPopover = [[UIPopoverController alloc] initWithContentViewController:nav];
    _infoPopover.popoverContentSize = CGSizeMake(preferredSize.width, preferredSize.height + 46);
    [_infoPopover presentPopoverFromRect:_infoButton.frame inView:_infoButton permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];

LibraryProductView 是在 LibraryProductViewController 的 viewDidLoad 方法中创建的。

- (void)viewDidLoad

    [super viewDidLoad];

    self.libraryProductView = [[LibraryProductView alloc] initWithFrame:(usingPreferredSize ? CGRectMake(0.0, 0.0, preferredSize.width, preferredSize.height) : self.view.bounds)];
    self.libraryProductView.dataSource = self;
    self.libraryProductView.delegate = self;

    [self.view addSubview:self.libraryProductView];

【问题讨论】:

这里更新一些代码,你已经实现了。 您应该考虑到您的代码中有错误。所以你应该把它展示给我们。 我添加了一些代码。另外,由于它是“特定的编程问题”,为什么当它完全是主题时,这个问题被标记为“离题”?未能设置的属性之一是separatorColor “有关您编写的代码问题的问题必须在问题本身中描述具体问题 - 并包括重现问题的有效代码。有关指导,请参阅 SSCCE.org。” ***.com/help/on-topic 【参考方案1】:

要设置 TableView 的属性,您可以在

中进行
- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView

    [tableView setBackgroundColor:[UIColor redcolor]];
    [tableView setSeparatorColor: [UIColor blueColor]];

    return 1;

当然,这假设您在 .h 文件中设置了 UITableViewDataSource

【讨论】:

以上是关于弹出框内的iOS 7 UITableView的主要内容,如果未能解决你的问题,请参考以下文章

弹出框内的 UITableView 宽度

弹出框内的 UISearchDisplayController - 取消搜索时动画效果不佳

弹出框内的按钮不起作用

Bootstrap弹出框内的断线

bootstrap:弹出框内的图像超出了窗口大小

选择器作为弹出框内的输入视图