来自 tableView 委托中的 self.tableView insertRowsAtIndexPaths
所以我想尝试构建自己的简单应用程序。请对我放轻松,我对这一切都是新手!想法是这样的。对于 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您的视图控制器的 .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.
我也有同样的问题。
有用的是从
UITableViewController
继承视图控制器,而不是UIViewController
。不在尖括号中使用协议名称。然后,TableView 通过故事板(或 InterfaceBuilder)链接到数据源和委托。
父类
UITableViewController
定义了一个IBOutlet tableView
。MyViewController.h:
I had the same problem.
What helped was to inherit the View Controller from
UITableViewController
, instead ofUIViewController
. 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 anIBOutlet tableView
defined.MyViewController.h: