2013-12-17 76 views
0

我在我的項目中使用UITabBarControllerstoryboard。該項目已經編碼爲iOS6 sdk。現在我正在研究其兼容性iOS7。我已經通過提供我自己的datasource來定製「more」標籤的tableview的設計,並且它在iOS6中完美地工作。奇怪地在iOS7設計被打擾。 Plz看到下面的圖像更詳細闡述。IOS7:UITabBarController的「更多」選項卡設計受到干擾

iOS6的:

ios 6 screenshot

iOS7:

ios 7 screenshot

最後這裏是代碼: -

-(void)tabBarController:(UITabBarController *)tbController didSelectViewController:(UIViewController *)viewController { 

    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 

    UINavigationController *navCtr=(UINavigationController *)viewController; 
    UITableView *moreTable = (UITableView *)tabBarController.moreNavigationController.topViewController.view; 
    moreTable.dataSource = nil; 
    if ([[navCtr.viewControllers lastObject] isKindOfClass:NSClassFromString(@"UIMoreListController")]){ 
     moreTableViewDataSource=[[MoreTableViewDataSource alloc] init]; 
     moreTable.dataSource = moreTableViewDataSource; 
     [moreTable setBackgroundColor:[UIColor clearColor]]; 
     [moreTable setSeparatorStyle:UITableViewCellSeparatorStyleNone]; 
    } 

} 

MoreTableViewDataSource.h

@interface MoreTableViewDataSource : NSObject <UITableViewDataSource,UITableViewDelegate> 
{ 

} 

@property (strong, nonatomic) id<UITableViewDataSource> originalDataSource; 

-(MoreTableViewDataSource *) initWithDataSource:(id<UITableViewDataSource>) dataSource; 

@end 

MoreTableViewDataSource.m

@implementation MoreTableViewDataSource 

-(MoreTableViewDataSource *) initWithDataSource:(id<UITableViewDataSource>) dataSource 
{ 
    self = [super init]; 
    if (self) 
    { 
     self.originalDataSource = dataSource; 
    } 

    return self; 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ 

    return 48.0; 
} 
- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section 
{ 
    return 5; 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    MoreTabCell *cell = (MoreTabCell*)[tableView dequeueReusableCellWithIdentifier:@"MoreTabCell"]; 
    if (cell==nil) { 
     cell = [[[NSBundle mainBundle] loadNibNamed:@"MoreTabCell" owner:nil options:nil] objectAtIndex:0]; 
    } 
    switch (indexPath.row) { 
     case 0: 
      cell.titleLbl.text=NSLocalizedString(@"approach", nil); 
      break; 
     case 1: 
      cell.titleLbl.text=NSLocalizedString(@"opening_time", nil); 
      break; 
     case 2: 
      cell.titleLbl.text=NSLocalizedString(@"weather", nil); 
      break; 
     case 3: 
      cell.titleLbl.text=NSLocalizedString(@"ticket", nil); 
      break; 
     case 4: 
      cell.titleLbl.text=NSLocalizedString(@"contact", nil); 
      break; 
     default: 
      break; 
    } 

    cell.titleLbl.textColor=[UIColor lightBlueColor]; 
    [cell.titleLbl setFont:[UIFont setGothicFontBoldWithSize:14.0]]; 
    [cell.imgView setImage:[UIImage imageNamed:[NSString stringWithFormat:@"moreIcon%d",indexPath.row+1]]]; 
    cell.accessoryView = nil; 
    return cell; 
} 
@end 

回答

0

在我自己嘗試後,我發現訣竅是將tableview的委託設置爲自定義或nil。由於UIMoreListController填寫標題和其他東西在tableView:willDisplayCell:forRowAtIndexPath:方法。

希望這會有所幫助。

+0

你是對的。儘管通過設置委託零你失去了tabbarcontroller的自動選擇,但一個自定義的委託會做。非常感謝。 –

0

而是使自己的titleLbl例如在小區的,何不乾脆位置和樣式現有titleLabel以同樣的方式?我不確定爲什麼會出現這種情況,因爲您尚未上傳MoreTabCell的代碼,但如果您不想停止使用titleLbl,則可以嘗試設置titleLabel.text = nil;

相關問題