2013-04-05 62 views
0

我想在我的应用程序中有一个相对较小的表视图。但我似乎没有运气,因为桌面视图占据了整个屏幕。表视图占用整个视图而不是输入宽度和高度

-(void)viewDidLoad{ 
UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectMake(0.0, 0.0, 20.0, 60.0) style:UITableViewStylePlain]; 

    self.view = tableView; 
} 

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
static NSString *MyCellIdentifier = @"MyCellIdentifier"; 

UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:MyCellIdentifier]; 

if(cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyCellIdentifier]; 
} 

return cell; 
    } 

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
return 5; 
    } 
+0

它是否在UIViewController中? – 2013-04-05 19:07:31

回答

3

在您的viewDidLoad方法代替self.view = tableView

[self.view addSubview:tableView]; 
0

您必须创建一个属性,并提供一个名称您的tableView:

@property(强,非原子)IBOutlet中的UITableView * myTableView;

之后,你必须连接的委托,做

@synthesize myTableView;

然后使用您的代码那样:

myTableView = [[UITableView的页头] initWithFrame:方法CGRectMake(0.0,0.0,20.0,60.0)式:UITableViewStylePlain];

没有这个 - > self.view = tableView;

0

我经常遇到这个问题。根据我的经验,处理此问题的最佳方法是创建一个容器视图控制器,该控制器具有表vc作为子vc。

我创建了一个简单的类来管理它。你可以在IB中设置vc。

#import <UIKit/UIKit.h> 


@interface ContainerViewController : UIViewController 

@property (weak, nonatomic) IBOutlet UIView *contentViewPlaceholderView; 
@property (strong, nonatomic) IBOutlet UIViewController *contentViewController; 

@end 

#import "ContainerViewController.h" 

@interface ContainerViewController() 

@property (assign, nonatomic)BOOL isContentVCAdded; 

@end 

@implementation ContainerViewController 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     [self setup]; 
    } 

    return self; 
} 
- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     [self setup]; 
    } 

    return self; 
} 

- (void)setup 
{ 
    self.isContentVCAdded = NO; 
} 

- (void)insertAndShowContentVC 
{ 
    [self removeAllChildVCs]; 
    self.contentViewController.view.frame = self.contentViewPlaceholderView.bounds; 
    [self addChildViewController:self.contentViewController]; 
    [self.contentViewPlaceholderView addSubview:self.contentViewController.view]; 
    [self.contentViewController didMoveToParentViewController:self]; 
    self.isContentVCAdded = YES; 
} 

- (void)removeAllChildVCs 
{ 
    for (UIViewController *vc in self.childViewControllers) { 
     [vc willMoveToParentViewController:nil]; 
     [vc.view removeFromSuperview]; 
     [vc removeFromParentViewController]; 
    } 
} 

- (void)setContentViewController:(UIViewController *)contentVC 
{ 
    _contentViewController = contentVC; 
    if (contentVC == nil) { 
     [self removeAllChildVCs]; 
    } 
    else { 
     [self insertAndShowContentVC]; 
    } 
} 

#pragma mark Lifecycle 

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    if (nil != _contentViewController && !self.isContentVCAdded) { 
     [self insertAndShowContentVC]; 
    } 
} 

@end 

你只需要创建一个contentViewPlaceholderView(IB中或代码)刚好有你想要的表视图有框架。然后你只需创建你的表格vc,并将它设置为contentViewControllerContainerViewController