2014-06-10 58 views
0

我正在研究iPad應用程序,並且在某些時候,我需要顯示帶有用戶選項的彈出窗口。爲此,我在UIPopoverController中使用UITableView。問題是,在iPad上(而不是在模擬器上),當滾動tableview時,我得到了一種「雙重視覺」效果,其中似乎存在兩組列表。一個是靜止的,一個是上下滾動的。iOS:UITableView在彈出窗口中看到「雙重視覺」效果

我構建這樣的酥料餅:

self.fClassTypeList = [[NSMutableArray alloc] init]; 
[self.fClassTypeList removeAllObjects]; 

NSUInteger stringLength = 0; 
(populate self.fClassTypeList, and set stringLength to the size of the longest entry) 

[self setContentSizeForViewInPopover:CGSizeMake(stringLength * 15.0f, [self.fClassTypeList count] * 30)]; 

CGFloat tableBorderLeft = 5; 
CGFloat tableBorderRight = 5; 
CGRect viewFrame = self.view.frame; 
viewFrame.size.width -= tableBorderLeft + tableBorderRight; // reduce the width of the table 

self.fListOfItems = [[UITableView alloc] initWithFrame:viewFrame style:UITableViewStylePlain]; 
self.fListOfItems.delegate = self; 
self.fListOfItems.dataSource = self; 
[self.view addSubview:self.fListOfItems]; 

我把視圖控制器的viewDidLayoutSubviews(...)的一部分,也許我應該把它放在別的地方?我不知道爲什麼這會發生在實際的機器上,但不是模擬器。

回答

1

-viewDidLayoutSubviews是一個奇怪的地方放分配,因爲該方法可以多次調用。因此,就您的主要問題而言,我相信您應該將您的分配移至-init方法中,並將您的佈局代碼移至-viewWillAppear方法中。

- (id)init 
{ 
    self = [super init]; 
    if (self) 
    { 
     self.fClassTypeList = [[NSMutableArray alloc] init]; 

     self.fListOfItems = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; 
     self.fListOfItems.delegate = self; 
     self.fListOfItems.dataSource = self; 
     [self.view addSubview:self.fListOfItems]; 
    } 

    return self; 
} 

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    NSUInteger stringLength = 0; 

    CGFloat tableBorderLeft = 5; 
    CGFloat tableBorderRight = 5; 
    CGRect viewFrame = self.view.frame; 
    viewFrame.size.width -= tableBorderLeft + tableBorderRight; // reduce the width of the table 
    self.fListOfItems.frame = viewFrame; 

    [self setContentSizeForViewInPopover:CGSizeMake(stringLength * 15.0f, [self.fClassTypeList count] * 30)]; 
} 

這促進了更好的內存管理。

作爲額外的好處,我建議您將 [self setContentSizeForViewInPopover:CGSizeMake(stringLength * 15.0f, [self.fClassTypeList count] * 30)];方法重構爲fClassTypeList的setter方法。更好的是在相同的setter方法中簡單地調用-viewWillAppear:。這會促進良好的可伸縮性,因爲您(或其他人)稍後會繼續構建此代碼。

看到你在這段代碼中想要完成什麼,因爲它太硬編碼了,所以讓我知道如果我錯過了你正在尋找的標記(有解釋爲什麼)和我將進行編輯。

乾杯

+0

感謝您的評論。我會重組我的工作。我試圖完成的是確保popover擁抱內容的大小。 – easythrees

相關問題