如何使用多个参数xcode创建方法

时间:2014-07-22 16:09:11

标签: ios objective-c

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

   //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];

正如您所看到的,我正在创建两个不同的按钮,只是具有不同的颜色和位置,所以我宁愿有一个方法允许我创建按钮。请指导我如何创建此方法。 谢谢!

2 个答案:

答案 0 :(得分:0)

这是我对自己的代码一直有意义的事情,只是还没有解决它。

这样的事情应该有效:

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

  // Your code goes here. 
}

只需使用适当的参数调用它即可。如果要输入大量参数,可以考虑使用NSDictonary而不是列出它们。 e.g。

- (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。

答案 1 :(得分:-1)

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

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

    myObj.h

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

returnValue是返回数据类型的任何内容(即NSString,ect),如果您不希望返回任何内容,则可以选择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)];