带有 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 不刷新的主要内容,如果未能解决你的问题,请参考以下文章

带有标题视图的 UITableView 不滚动到顶部

带有 UICollectionviewcell 和 UITableviewcell 的 UITableview

UITableView - 插入带有动画问题的行

带有 UIToolBar 的 UITableView

带有滚动背景图案的 UITableView

使带有删除按钮的 UITableView 对所有单元格可见