【问题标题】:How to create a method with multiple parameters xcode如何创建具有多个参数的方法xcode
【发布时间】:2014-09-13 13:44:22
【问题描述】:

我对客观 C 场景相当陌生。我正在编写一个应用程序,我注意到我一直在重复自己,那么为什么不创建一个方法呢?我试图创建一个具有多个参数的方法,这些参数是 UIButton 的颜色和位置。所以基本上每次我调用这个方法时,我都可以创建一个 UIbutton。我将如何将其创建为自己的方法?

   //Left Button
uploadPhotoButton = [UIButton buttonWithType:UIButtonTypeCustom];

[uploadPhotoButton setImage:[UIImage imageNamed:@"uploadphotoicon"] forState:UIControlStateNormal];

uploadPhotoButton.frame = CGRectMake(0, 0, 80, 80);

uploadPhotoButton.clipsToBounds = YES;

uploadPhotoButton.layer.cornerRadius = 80/2.0f;
uploadPhotoButton.layer.borderColor = [UIColor colorWithRed:.102 green:.737 blue:.612 alpha:1.0].CGColor;
uploadPhotoButton.layer.borderWidth = 2.0f;

[self.view addSubview:uploadPhotoButton];
[uploadPhotoButton setCenter:CGPointMake(78, 139)];
[uploadPhotoButton addTarget:self action:@selector(uploadPhotoButton:) forControlEvents:UIControlEventTouchUpInside];

//Right Button

uploadPhotoButton2 = [UIButton buttonWithType:UIButtonTypeCustom];

[uploadPhotoButton2 setImage:[UIImage imageNamed:@"uploadphotoicon"] forState:UIControlStateNormal];

uploadPhotoButton2.frame = CGRectMake(0, 0, 80, 80);

uploadPhotoButton2.clipsToBounds = YES;

uploadPhotoButton2.layer.cornerRadius = 80/2.0f;
uploadPhotoButton2.layer.borderColor = [UIColor colorWithRed:.749 green:.580 blue:.894 alpha:1.0].CGColor;
uploadPhotoButton2.layer.borderWidth = 2.0f;

[self.view addSubview:uploadPhotoButton2];
[uploadPhotoButton2 setCenter:CGPointMake(242, 139)];
[uploadPhotoButton2 addTarget:self action:@selector(uploadPhotoButton:) forControlEvents:UIControlEventTouchUpInside];

如您所见,我正在创建两个不同的按钮,只是颜色和位置不同,所以我宁愿有一种方法可以让我创建按钮。请逐步指导我如何创建此方法。 谢谢!

【问题讨论】:

  • 你有没有努力创建这个方法?如果您对 Objective-C 的了解不够多,无法编写方法,我可以礼貌地建议您找一个关于该语言的好教程。 SO 并不是学习基础知识的好地方。

标签: ios objective-c


【解决方案1】:

我要做的第一个决定是弄清楚我是否需​​要在一个对象中使用它,或者只是一个让所有组件都可以访问的函数。如果我决定它是一个对象的方法,那么我们有两个任务:

  • 在 Xcode 环境中将类创建为新文件(左下角的 +)后,我们将拥有 .h 和 .m 文件。 .h 将显示为 myObj.h,myObj 是对象的名称,我们可以在其中声明对象的所有属性和方法。因此,我们在这里添加方法如下:

    myObj.h

     -(returnValue) myMethod: (parameter) 
                      withNextParam: (parameter)
                      withOtherParam: (parameter);
    

returnValue 是返回的数据类型(即 NSString 等),如果您不希望返回任何内容,则可以选择 void。 多个参数的描述符由您创建,相关性是关键,因为您可能有 4-5 个不同的参数,并且其他人可以更清楚地看到代码逻辑。

  • 在 .h 文件中添加方法后,我们仍然需要为该方法添加实际代码。 .m 文件就是这样做的地方:

    myObj.m

    -(returnValue) myMethod: (parameter) 
                      withNextParam: (parameter)
                      withOtherParam: (parameter){
    //    Enter Code Here...
    }
    

至此,我们的方法已经完成并可以使用了。最后一部分是调用方法。

  • 在您的 AppDelegate.m 文件或您将调用该方法的任何位置创建一个对象。

       myObj * firstObject = [[myObj alloc] init];
    

此代码将为新对象分配内存,然后进行初始化以使其可用于操作。所有对象在创建时都将采用指针 (*)。

  • 我们获取我们的新对象并告诉它执行给定的方法:

    [firstObject myMethod: (parameter)
                       withNextParam: (parameter)
                       withOtherParam: (parameter)];
    

    改变这种情况的唯一方法是如果我们有一个返回值,在这种情况下:

    (returnValue*) returnedVar = [firstObject myMethod: (parameter)
                       withNextParam: (parameter)
                       withOtherParam: (parameter)];
    

【讨论】:

  • OP 显然是新的,不知道如何创建方法。您的回答并不能真正帮助用户了解如何创建一种新方法来满足他们的需求。这个答案是描述如何调用现有方法的模糊方式,而不是关于如何编写新方法。
  • 这不是声誉问题,而是发布有用(或没有)答案的问题。如果您愿意,请随时更新您的答案以改进或删除它。
  • @rmaddy 好的,野心被接受,我试图给出另一个角度来回答。但这似乎相关吗?
【解决方案2】:

这是我一直想用我自己的代码做的事情,只是还没开始。

这样的事情应该可以工作:

- (void)displayButton:(NSString *)buttonName 
         withFontSize:(NSString *)fontSize 
            withColor:(UIColor)buttonColor
           atLocation:(CGRect)location { 

  // Your code goes here. 
}

只需使用适当的参数调用它。如果您想输入大量参数,您可以考虑使用 NSDictionary 而不是列出它们。例如

- (void)displayButton:(NSDictionary *)buttonParameters 

  // Your code goes here. 
}

虽然我还没有使用按钮,但我使用类似的方法来布置网格以将对象放置在屏幕上。我经常使用它,所以我把它放到了自己的类中。

+ (NSDictionary *)findFramesWithParentView:(UIView *)parentView
                              numberOfRows:(NSUInteger)numberOfRows
                           numberOfColumns:(NSUInteger)numberOfColumns
                                 pictWidth:(NSUInteger)pictWidth
                                pictHeight:(NSUInteger)pictHeight
                             densityFactor:(NSUInteger)densityFactor
                         itemLocationArray:(NSArray *)itemLocationArray
                        withSwipeDirection:(NSString *)swipeDirection {

    // Calculations go here

    NSDictionary *frames = @{@"pictures": pictFrames, @"finalX": finalX};
    return frames;
}

我返回一个用于显示对象的 NSDictionary。

【讨论】:

    猜你喜欢
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 2015-06-14
    相关资源
    最近更新 更多