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;
  }
4

3 回答 3

3

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

[self.view addSubview:tableView];
于 2013-04-05T19:08:44.247 回答
0

您必须创建一个属性并为您的 tableView 命名:

@property(strong, nonatomic) IBOutlet UITableView* myTableView;

之后,您必须连接代表并执行

@synthesize myTableView;

然后像这样使用你的代码:

myTableView = [[UITableView alloc] initWithFrame:CGRectMake(0.0, 0.0, 20.0, 60.0) style:UITableViewStylePlain];

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

于 2013-04-05T19:10:46.053 回答
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

于 2013-04-05T19:17:29.647 回答