如何使Xcode自动完成委托方法?

时间:2013-09-12 11:44:01

标签: iphone ios objective-c xcode

此代码使用委托

[[[UIAlertView alloc] initWithTitle: @ "Error" message: @ "You can leave the text blank" delegate: self cancelButtonTitle: @ "Quit" otherButtonTitles: @ "OK", nil] show];

有问题的代表是:

 (void) alertView: (UIAlertView *) alertView clickedButtonAtIndex: (NSInteger) buttonIndex {

我的问题是: 如何自动完成Xcode委托方法?。

在Eclipse中,您可以从Source菜单选项Generate Delegate methods。

问候并感谢!

7 个答案:

答案 0 :(得分:7)

您的课程应该支持UIAlertViewDelegate协议

@interface YourClass : NSObject 
<
  UIAlertViewDelegate
>

开始输入“破折号” - 您会看到所有支持的方法都包含UIAlertViewDelegate方法。要减少自动填充方法列表:键入-alert

只需使用“转到定义”即可查看所有“UIAlertViewDelegate”方法。开始在XCode

中键入以下方法之一

enter image description here

如果@required部分下的方法必须在您的委托对象中实现它,否则您将收到警告。 如果在@optional方法下,您不必实施任何这些方法(您将不会收到警告),但在大多数情况下,您应该这样做,让它按预期工作。

答案 1 :(得分:2)

如果方法,则不会收到有关未实现方法的任何警告。 XCode和Eclipse是不同的。

在第二个想法中,你可以使用这个trick

答案 2 :(得分:1)

另一种选择,你可以使用appcode而不是xcode,可以找到“生成”功能。

答案 3 :(得分:1)

请尝试在键盘上按esc,Xcode:版本11.3.1(11C504)

enter image description here

答案 4 :(得分:0)

在Xcode中,您可以根据需要使用自定义组件创建自己的类,并在侧面创建一个委托方法,用于响应,就像人们用于解析和AsyncImageView等一样。

您可以访问here获取Async类演示,并使用此代码进行解析,您可以为UIAlertView编写自己的类

答案 5 :(得分:0)

非常感谢大家。

在这种情况下,所有“@protocol UIAlertViewDelegate”方法都在@ optional下。我明白在这种情况下我的类不应该支持UIAlertViewDelegate协议,因为所有方法都在@optional下。

解决方案是:

右键单击UIAlertViewDelegate或UIAlertView,单击“跳转到定义”,然后您可以看到@protocol。在里面你可以看到@optional和@requiered的方法。如果@required部分下的方法你必须在你的委托对象中实现它,否则你会收到警告。如果在@optional方法下你不必实现任何这些方法(你不会收到警告)

再次感谢您

答案 6 :(得分:0)

这就是我为经常使用的代表所做的事情。

  • 通过访问UIAlertViewDelegate定义,找到您将始终实现的必需方法和可选方法。
  • 为这些方法添加空实现。
  • 添加一个片段,快捷方式是委托名称,内容是我的空实现(选择然后拖放到代码段库)
  • 下次我使用该委托时,我需要做的就是开始输入我的快捷方式(例如:AlertViewDelegate自动插入我的空实现

加成:

我有时也会在实现中添加一些默认代码,例如:

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    NSString* title = [alertView.title lowercaseString];
    if (buttonIndex != alertView.cancelButtonIndex) {
        if ([title isEqualToString:<#action title#>]) {
            <#statements#>
        }
    }else{
        <#cancel code#>
    }
}