我完全更新了我的问题以及更多理解的所有细节!
正如他们所说的那样,图片说的不仅仅是文字,我给你做了一个小模型来详细解释一切!
首先,我在文中解释。
我有这个:
现在image / mockup:
在我的MasterViewController.h(代码的一部分)
@property (strong, nonatomic) FirstView *firstView;
@property (strong, nonatomic) SecondView *secondView;
@property (strong, nonatomic) ThirdView *thirdView;
在我的MasterViewController.m(代码的一部分)
firstView = [[LastSalesView alloc] initWithFrame:CGRectMake(0.0, 0.0, result.width, result.height)];
firstView.backgroundColor = [UIColor clearColor];
firstView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[bottomContainerView addSubview:firstView];
[firstView setHidden:NO];
secondView = [[LastSalesView alloc] initWithFrame:CGRectMake(0.0, 0.0, result.width, result.height)];
secondView.backgroundColor = [UIColor clearColor];
secondView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[bottomContainerView addSubview:secondView];
[secondView setHidden:NO];
thirdView = [[LastSalesView alloc] initWithFrame:CGRectMake(0.0, 0.0, result.width, result.height)];
thirdView.backgroundColor = [UIColor clearColor];
thirdView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[bottomContainerView addSubview:thirdView];
[thirdView setHidden:NO];
-(void)viewFirstPage:(id)sender {
NSLog(@"button first pushed");
[firstView setHidden:NO];
[secondView setHidden:YES];
[thirdView setHidden:YES];
}
-(void)viewSecondPage:(id)sender {
NSLog(@"button second pushed");
[firstView setHidden:YES];
[secondView setHidden:NO];
[thirdView setHidden:YES];
}
-(void)viewThirdPage:(id)sender {
NSLog(@"button third pushed");
[firstView setHidden:YES];
[secondView setHidden:YES];
[thirdView setHidden:NO];
}
答案 0 :(得分:1)
您询问的UITableViewDataSource
方法通常属于视图控制器。实际上,您的MasterViewController
类已经声明它实现了UITableViewDataSource
协议:
@interface MasterViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
因此,当您在MasterViewController
中创建表视图时,视图控制器将需要告诉表视图它是数据源(和委托):
myTableView = [[MyTableView alloc] initWithFrame:CGRectMake(0.0, 0.0, result.width, result.height)];
myTableView.dataSource = self;
myTableView.delegate = self;
这应该让你走上正确的道路。
答案 1 :(得分:1)
免责声明 这个答案是在OP更新他的帖子之前给出的,原来的问题几乎就是“我如何使用表格视图?”,现在它有了变成完全不同的东西。我的回答可能对某人有价值。
让我简单地向您解释如何使用表格视图。这里有三个主要组成部分:
UITableView
是MVC模式中的视图,它唯一的工作是呈现数据,并且相对于其内容偏移量这样做,并且通过设置它来实现当它们离开屏幕时它排队的细胞数量,并在它们应该被显示时将它们出列。如果你注意,UITableView
继承自UIScrollView
,所以它所做的就是通过一个可重复使用的单元系统扩展滚动机制,允许它使用最少量的单元格。 UITableViewCell
负责代表应用内的单个数据。它也是MVC模式中视图的一部分。UITableView
需要从某个地方获取数据,有两种可能性,要么你:
UITableViewController
。UITableViewDataSource
。您选择的任一选项,现在将填充数据的类将成为MVC模式中的控制器(该模型完全取决于您,可能是一个简单的字符串数组,和表格视图一样多。)
UITableView
期望为他填充(或创建)单元格。这是一个重要的区别:
registerNib:forCellReuseIdentifier:
和registerClass:forCellReuseIdentifier:
方法,您不再需要创建自己的单元格创建,它会自动检查是否需要更多单元格,并根据需要实例化它们。 所有事情都说,如果您只需要更改它将显示的数据,就不应该对表视图进行子类化。
完全取决于你认为谁应该是委托,你甚至可以有一个单独的对象来控制tableview中的数据。
但是现在,让它在MasterViewController
中运行。在MasterViewController
xib文件中,有一个没有子类的普通UITableView。确保MasterViewController
符合<UITableViewDataSource>
,然后将tableview dataSource
插座连接到MasterViewController
(文件所有者,最有可能)。
唯一重要的两个方法是-tableView:cellForRowAtIndexPath:
和-tableView:numberOfRowsInSection:
,实现这些方法,并且你的tableView可以正常工作。
高度,编辑和其他所有内容都是UITableViewDelegate
协议的一部分,如果你关心这些,请重复上述步骤,但是delegate
出口。
我不明白为什么人们如此讨厌笔尖,但是......无论如何,让它在MasterViewController
上运行。
<强> MasterViewController.m 强>
#include "MasterViewController.h"
#include "MyCell.h"
@interface MasterViewController <UITableViewDataSource, UITableViewDelegate>
@property (nonatomic,weak) UITableView *tableView;
@end
@implementation MasterViewController
- (void)viewDidLoad
{
// Notice that this method only gets called if you're using a nib
// If you plan of getting rid of nibs ENTIRELY, use -loadView
[super viewDidLoad];
UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
tableView.dataSource = self;
tableView.delegate = self;
[self.view addSubview:tableView];
// Save a reference to it
self.tableView = tableView;
// iOS 5+
[tableView registerClass:[MyCell class] forCellReuseIdentifier:@"cell.something"];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 10;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// Again, iOS 5+
MyCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell.something" forIndexPath:indexPath];
cell.textLabel.text = @"Hello world!";
return cell;
}
@end
此外,我的印象是您不希望MasterViewController
处理与表视图数据相关的代码。因为它是一个代表,你可以把它指向你想要的任何东西!删除符合所述协议的NSObject
,您只需执行此操作:
如果您正在处理非常复杂的视图,并且所有额外的tableView:didFart:andSmelledNice:
代码都会受到阻碍,那么非常有用。你显然是靠代码来做的,但是我不会这样做,认为这是你离开笔尖的方式的惩罚。
答案 2 :(得分:0)
如果你的View UITableView那么你可以像这样使用---
MyFirstView.h
#import <UIKit/UIKit.h>
@class UIViewController;
@interface MyFirstView : UITableView<UITableViewDelegate,UITableViewDataSource>
@end
MyFirstView.m
#import "MyFirstView.h"
@implementation MyFirstView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.delegate=self;
self.dataSource=self;
// Initialization code
}
return self;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 10;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *mycell=[tableView dequeueReusableCellWithIdentifier:@"cellIdentifier"];
if (mycell==nil) {
mycell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cellIdentifier"];
}
mycell.textLabel.text=@"My super view is tableView.";
return mycell;
}
@end
将这些UITableView文件用作
MyFirstView *tblView=[[MyFirstView alloc] init];
[tblView setFrame:CGRectMake(0, 0, 320, 300)];
[self.view addSubview:tblView];
如果仍然不理解read this