我对目标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];
正如您所看到的,我正在创建两个不同的按钮,只是具有不同的颜色和位置,所以我宁愿有一个方法允许我创建按钮。请指导我如何创建此方法。 谢谢!
答案 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)];