我在我的项目UITabBarController
中使用storyboard
。该项目已使用iOS6
sdk进行编码。现在我正在研究它的iOS7
兼容性。我通过提供自己的more
来自定义“tableview
”标签datasource
的设计,并且它在iOS6
中完美运行。奇怪的是iOS7
设计受到了干扰。 Plz请参阅以下图片以获得更多详细说明。
iOS6的:
iOS7:
最后这里是代码: -
-(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 :(得分:0)
不是在单元格中创建自己的titleLbl
实例,为什么不以同样的方式简单地定位和设置现有的titleLabel
样式?我不确定为什么会发生这种情况,因为您尚未上传MoreTabCell
的代码,但如果您不想停止使用titleLabel.text = nil;
,则可以尝试设置titleLbl
。< / p>
答案 1 :(得分:0)
在我自己尝试之后,我发现诀窍是将tableview的委托设置为自定义或nil
。由于UIMoreListController
在tableView:willDisplayCell:forRowAtIndexPath:
方法中填写了标题和其他内容。
希望这会有所帮助。