来自 tableView 委托中的 self.tableView insertRowsAtIndexPaths

发布于 2024-12-12 09:16:08 字数 1228 浏览 0 评论 0原文

所以我想尝试构建自己的简单应用程序。请对我放轻松,我对这一切都是新手!想法是这样的。对于 iPad,有一个带有文本框和文本字段的单一视图控制器。文本框采用标题,文本字段采用报告正文。页面上有一个用于提交报告的按钮,它将两个文本捆绑到一个对象中,并将其添加到同一视图控制器内的表视图中。我已在头文件中使用 将视图控制器设置为委托。我的表格视图可以很好地在 viewDidLoad 方法中添加项目。但是,通过连接到 -(IBAction) addItem 的 UIButton 从文本输入添加项目会失败: 在“ReportsViewController”类型的对象上找不到属性“tableView”

- (IBAction)addReportItem
{
int newRowIndex = [reports count];

ReportObject *item = [[ReportObject alloc] init];
item.title = @"A new title";
item.reportText = @"A new text";
[reports addObject:item];

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:newRowIndex inSection:0];
NSArray *indexPaths = [NSArray arrayWithObject:indexPath];
[self.tableView insertRowsAtIndexPaths:indexPaths   withRowAnimation:UITableViewRowAnimationAutomatic];
}

我明白我正在尝试调用我的对象中的方法,但我还有其他方法调用 tableView ,效果很好。即

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [reports count];
}

我认为这是授权的重点。我知道我错过了一些东西,但正如我所说,我对这一切都是新手,并且在发布之前到处寻找答案。我需要做什么才能将 IBAction 消息发送到 tableView

So I thought I'd have a go at building my own simple app. Please go easy on me I'm new to all this! The idea is this. For iPad have a single view controller with a text box and a text field. Text box takes a title, and text field takes the body of a report. There's a button on the page to submit the report, which bundles the two texts into an object and adds it to a table view within the same view controller. I have set the view controller as a delegate with <UITableViewDelegate, UITableViewDataSource> in my header file. My table view works fine for adding items in the viewDidLoad method. But adding items from the text inputs via a UIButton connected to -(IBAction) addItem falls over with: Property 'tableView' not found on object of type 'ReportsViewController'

- (IBAction)addReportItem
{
int newRowIndex = [reports count];

ReportObject *item = [[ReportObject alloc] init];
item.title = @"A new title";
item.reportText = @"A new text";
[reports addObject:item];

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:newRowIndex inSection:0];
NSArray *indexPaths = [NSArray arrayWithObject:indexPath];
[self.tableView insertRowsAtIndexPaths:indexPaths   withRowAnimation:UITableViewRowAnimationAutomatic];
}

I understand that I'm trying to call a method within my object but I have other method calls to tableView which work fine. i.e.

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [reports count];
}

I thought this was the point of delegation. I know I'm missing something, but as I say I am new to all this and have looked everywhere for an answer before posting. What do I need to do to send my IBAction message to tableView?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

|煩躁 2024-12-19 09:16:08

您的视图控制器的 .h 文件中是否有 tableView 实例变量设置?

您能够在委托和数据源方法中访问它的原因是因为它们作为方法的一部分传入。

您需要添加 IBOUTLET tableView ivar 并将其连接到 .xib 中的 tableView。

或者也许你的 tableView 的 ivar 被命名为其他名称?

祝你好运。

Do you have a tableView instance variable setup in your .h file of the view controller?

The reason you are able to access it in the delegate and data source methods is because they are passed in as part if the methods.

You will need to add the IBOUTLET tableView ivar and connect it to the tableView in your .xib.

Or perhaps your ivar for the tableView is named something else?

Good luck.

空心空情空意 2024-12-19 09:16:08

我也有同样的问题。
有用的是从 UITableViewController 继承视图控制器,而不是 UIViewController。不在尖括号中使用协议名称。
然后,TableView 通过故事板(或 InterfaceBuilder)链接到数据源和委托。

父类UITableViewController 定义了一个IBOutlet tableView

MyViewController.h:

@interface MyViewController : UITableViewController

I had the same problem.
What helped was to inherit the View Controller from UITableViewController, instead of UIViewController. Not using the protocol names in angled brackets.
The TableView is then linked to the dataSource and delegate via the storyboard (resp. InterfaceBuilder).

The parent class UITableViewController has an IBOutlet tableView defined.

MyViewController.h:

@interface MyViewController : UITableViewController
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文