昨天我刚问了以下问题。
即使在苹果文档中,我也没有找到这种方法。
是隐藏方法吗?
有人提供所有方法列表吗? 包括示例代码。
比如说。 UITableView方法
每当我在视图Controller中插入tableView时。
我必须从某些地方输入或复制。
如果我想要包含选择器,我必须找出UIPicker方法, 同样的方式 Alertview,ActionSheet,Tab Bar Controller都有不同的方法。
是不是可能,就像我们在ViewController中包含一个tableView一样,自动将所有tableview方法添加到.m文件中。
(例如,基于导航的应用程序默认情况下在rootview控制器中具有所有tableView方法)
让我再次澄清,
“我需要适当的源,所有方法(如rootview控制器几乎都有表方法)”
所以,当我想要添加任何控件时,我只需复制代码&添加到我的项目。
背后的原因 “我们可以针对工作而不是找到合适的方法并输入它们。”
请参阅,假设如果我将表视图添加到我的视图控制器,我必须有像..didSelectAtRow ..,.. CellForRow ...等方法。
所以,在添加tableView之后 - 为了管理表视图,我必须去寻找方法&在我的.m文件中输入它们。
假设我添加了tableView。应将所有方法添加到我的.m文件中,如下所示。
<pre>
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 返回1; }
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 返回0; }
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString * CellIdentifier = @“Cell”;
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil){
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
返回细胞;
}
//覆盖以支持表视图中的行选择。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//导航逻辑可能会在这里 - 例如,创建并推送另一个视图控制器。
// AnotherViewController * anotherViewController = [[AnotherViewController alloc] initWithNibName:@“AnotherView”bundle:nil];
// [self.navigationController pushViewController:anotherViewController animated:YES];
// [anotherViewController发布];
}
//覆盖以支持表视图的条件编辑。 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { //如果您不希望指定的项目可编辑,请返回NO。 返回YES; }
//覆盖以支持编辑表格视图。 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
// Delete the row from the data source.
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
else if (editingStyle == UITableViewCellEditingStyleInsert) {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view.
}
}
//覆盖以支持重新排列表格视图。 - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath { }
//覆盖以支持表视图的条件重新排列。 - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath { //如果您不希望该项目可以重新订购,请返回NO。 返回YES; }
答案 0 :(得分:2)
我提供了您提到的问题的答案 - 它肯定在Apple文档中(尽管如您所说,不在示例文件中)。请记住方法名称是
tableview:didSelectRowAtIndexPath
如果您在开头错过了“tableview:”位,只需搜索
didSelectRowAtIndexPath
你很难在文档中找到它。
如果您查看XCode附带的文档,您将看到,例如,您可以为UITableview Delegate实现的所有方法,包括我发布到您之前答案的方法。只需在XCode帮助中输入“UITableview”,然后选择“UITableview委托”。然后它会显示您可以调用的所有方法,甚至可以直接将它们复制并粘贴到您的代码中。
我不知道是否有人已经这样做了并且提出了你所要求的“模板”课程,但如果你愿意的话,你应该很容易自己做。
希望有所帮助
答案 1 :(得分:1)
不确定;类的实现者可以自由地实现任意数量的方法作为类的内部实现的一部分。
但这并不意味着你应该使用它们。
您可以使用Objective-C运行时的API来确定所有方法和类,包括那些未公开声明的方法和类。
但不要打扰。
具体而言,如果未在提供的头文件中声明方法且文档中未记录该方法,请不要使用它。使用这种方法会导致脆弱和维护问题;您的应用可能会在下次软件更新时中断。
在iPhone上,明确指示您不要使用私人界面,如果您这样做,您的应用会冒被拒的风险。
但我认为这不是你真正要求的。你提到:
比如说。 UITableView方法 包括
didSelectRowAtIndexPath方法 cellForRowAtIndex路径 numberOfSectionsInTableView titleForHeaderInSection
但是,UITableView不会声明任何这些方法。相反,它声明:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
或者,简洁地说,tableView:didSelectRowAtIndexPath:
等......
答案 2 :(得分:1)
您描述的方法在文档中。它们位于UITableViewDelegate和UITableViewDataSource中,在UITableView文档的顶部有描述。您可以轻松地从文档中复制和粘贴所需的方法定义。您还可以使用“文件&gt;快速打开...”并输入协议名称(例如“UITableViewDelegate”)轻松地在标题中找到协议定义。它们通常写在标题中,以便于复制和粘贴您最常用的内容。
这在Cocoa中有时是一个小麻烦,因为Xcode不会自动完成方法签名。如果它确实会省一点麻烦。但解决方案不是实现存在的每个委托方法(正如@bbum先前指出的那样)。在绝大多数情况下,只有一小部分可能的委托方法得到实施。所以自动填充它们会导致比保存更多的工作。