2

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 刷新......我确实找到了这个,这似乎与我遇到的问题相同,

我所做的是在 MyModalViewController 类中创建一个 MyTableViewController* 属性。在 presentModalView 之前,我将表视图控制器指针存储在模态视图控制器中。

现在,当我在模态视图控制器中时,我有了对表视图控制器的引用。现在只需使用这个存储的 table view 控制器来定位它的 tableView,然后 reloadData。

感觉很脏,但可以完成工作。”

如果这是答案,我不知道如何编码。

提前谢谢!

  • sk

注意:我刚试过这个:

。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]; 

但这似乎不起作用。

4

4 回答 4

3

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];

与袖带上键入的任何代码一样,您的里程可能会有所不同。:\

于 2009-08-27T19:30:12.183 回答
2

谢谢您的帮助。终于解决了,问题来了:

1) 我的控制器正在扩展 UIViewController,而不是 UITableViewController。

一旦我扩展了正确的类,然后通过 File's Owner 和 IB 正确连接它,它就起作用了。现在在 viewWillAppear 中我可以调用 self.tableView reloadData。

永远不会再犯这种错误了!

谢谢大家-

sk

于 2009-06-03T00:48:55.023 回答
1

你可以使用 UIViewController——你只需要实现 UITableViewDelegate 和 UITableViewDataSource 协议。

--r

于 2009-08-17T16:52:58.683 回答
0

在视图中将出现方法(我假设在您的控制器类中)调用

[self.tableView reloadData];
于 2009-06-02T01:50:13.090 回答