带有 UITableView 的 UIToolBar - 加载时 TableView 不刷新
Posted
技术标签:
【中文标题】带有 UITableView 的 UIToolBar - 加载时 TableView 不刷新【英文标题】:UIToolBar with UITableView - TableView is not refreshing when loaded 【发布时间】:2009-06-02 01:40:59 【问题描述】:UIToolBar 有两个视图,一个带有 UITextViews 的 UIView 和一个带有 UITableView 的 UIView。
通过 UIToolBar 调用的 UITableView。 UITableView 第一次加载时,它会访问数据库并获取信息。我“tab”回到 UIView w/UITextViews 选择一些数据,然后“tab”回到 UITableView,但是没有一个委托方法被调用,比如 viewDidLoad 或 initWithNibName 或任何东西,因此表中的数据是陈旧的。
所以,我找到了方法
-(void)viewWillAppear:(BOOL)animated
被调用,但是,它无权访问 tableView,例如,
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
我确实偶然发现了这个建议:
“我似乎无法弄清楚如何制作 UITableView 刷新...我确实找到了 这个,看起来一样 我遇到的问题,
我所做的是创建一个 MyTableViewController* 中的属性 MyModalViewController 类。前 presentModalView,我存储表格 查看指向此的控制器指针 模态视图控制器中的属性。
现在我参考了表格视图 当我在模态视图中时控制器 控制器。现在只需使用这个存储的 表视图控制器来定位其 tableView,然后重新加载数据。
感觉很脏,但可以完成工作。”
如果这是答案,我不知道如何编码。
先谢谢了!
问注意:我刚试过这个:
.h
UITableView *tableViewPtr;
@property (nonatomic, retain) UITableView *tableViewPtr;
.m
@synthesize tableViewPtr;
并将其存储在 -
(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath :
...
self.tableViewPtr = tableView;
...
然后尝试从
调用它-(void)viewWillAppear:(BOOL)animated
[self.tableViewPtr reloadData];
但这似乎不起作用。
【问题讨论】:
我也试过这个:.h UITableView *tableViewPtr; @property (nonatomic, 保留) UITableView *tableViewPtr; .m @synthesize tableViewPtr;并将其存储在 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath : ... self.tableViewPtr = tableView; ...然后尝试从 -(void)viewWillAppear:(BOOL)animated : [self.tableViewPtr reloadData]; 调用它但这似乎不起作用。 天哪,最后一条评论被毁了。对不起。 【参考方案1】:mr-sk:您可能需要更多地了解 Objective-C 的工作原理。当您声明 UIViewController(或子类)时,您只需实现 UITableView 协议:
@interface ViewWithTableView : UIViewController
<UITableViewDelegate, UITableViewDataSource> ...
然后在 viewController 中实现所需的协议方法。您只需实现少数几种方法即可支持 tableView。
如果您使用的是 IB,请像这样定义您的界面:
@interface ViewWithTableView : UIViewController
<UITableViewDelegate, UITableViewDataSource>
IBOutlet UITableView *yourTableView;
. . .
并保存,然后去IB并右键单击tableView。单击并将绑定从 DataSource 和 Delegate 拖动到您的 viewController(可能是您的文件所有者。)然后单击 viewController 并键入 cmd-4。在“类标识”部分的“类”下拉菜单中选择“ViewWithTableView”或任何您称之为的名称。保存所有内容,一切都会好起来的。
请注意,除非您为 tableView 添加@property,否则您不会调用 self,因为没有访问器:
[yourTableView whatever:withWhatever];
与在袖带上键入的任何代码一样,您的里程可能会有所不同。 :\
【讨论】:
【参考方案2】:感谢您的帮助。终于解决了,问题来了:
1) 我的控制器正在扩展 UIViewController,而不是 UITableViewController。
一旦我扩展了正确的类,然后通过文件所有者和 IB 正确连接它,它就可以工作了。现在在 viewWillAppear 中我可以调用 self.tableView reloadData。
不会再犯这个错误了!
谢谢大家-
问
【讨论】:
【参考方案3】:你可以使用 UIViewController——你只需要实现 UITableViewDelegate 和 UITableViewDataSource 协议。
--r
【讨论】:
【参考方案4】:在视图中将出现方法(我假设在您的控制器类中)调用
[self.tableView reloadData];
【讨论】:
FavoriteViewController.m:115:错误:请求成员“tableView”不是结构或联合我没有该名称的类属性。当我提到 tableView 时,我指的是 tableView 方法传入的参数。 您的表格视图控制器应该可以访问表格视图 - 您在正确的文件中吗??? 是的 - 我在 ViewController 中,它包含一个 UIView 和一个 UITableView。我不明白的是它将如何访问。控制器中的其他方法 (- (UITableViewCell *)tableView:(UITableView *)tableView) 必须传入 tableView ......所以......我不明白为什么我可以访问它。就像我说的,我没有为这个类创建一个 tableView 属性(但我可以)。我的第一篇文章概述了我的项目结构(带有两个 UIViewController 的 UITabController)。 帮助澄清:mr-sk.com/iphone/current.png -FavoriteViewController 是我所说的。以上是关于带有 UITableView 的 UIToolBar - 加载时 TableView 不刷新的主要内容,如果未能解决你的问题,请参考以下文章