iOS 5 SDK创建可在任何地方使用的方法

时间:2012-02-09 20:31:43

标签: ios iphone methods ios5

如何制作适用于多个视图的方法?例如。我创造了这个:

- (void)setPageTitle:(UILabel *)title withText:(NSString *)text
{
    UIColor *pageTextColor = [UIColor colorWithRed:18.0/255.0 green:79.0/255.0 blue:118.0/255.0 alpha:1.0];

    // Set page title
    UIFont *font = [UIFont fontWithName:@"PassionOne-Regular" size:23];
    [title setFont:font];
    [title setText: text];
    title.textColor = pageTextColor;
    title.shadowColor = [UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1.0];
    title.shadowOffset = CGSizeMake(0, 1);

    CGRect titleRect = [title textRectForBounds:title.bounds limitedToNumberOfLines:999];
    CGRect tr = title.frame;
    tr.size.height = titleRect.size.height;
    title.frame = tr;
}

我希望能够在不同视图中的UILabels上调用setPageTitle方法。我该怎么做呢?我在哪里放置此代码才能使其正常工作?我只想把它放在1个文件中,让它在不同的视图中工作。谢谢。

4 个答案:

答案 0 :(得分:9)

我建议将其作为UIView类的一个类别。

的UIView + PageTitle.h

@interface UIView (PageTitle)
- (void)setPageTitle:(UILabel *)title withText:(NSString *)text;
@end

的UIView + PageTitle.m

#import "UIView+PageTitle.h"
@implementation UIView (PageTitle)
- (void)setPageTitle:(UILabel *)title withText:(NSString *)text {
    // your implementation
}
@end

答案 1 :(得分:1)

你可能正在寻找的是要么创建一个UIViewController的子类(我相信你正在使用它),并将它作为一个方法,将它作为你的类MyUIViewController,或者,您可以创建UIViewController的类别并添加该方法。 Here是关于如何创建类别以及一些有用信息的说明。类别是类的功能的扩展,几乎是你想要做的。

答案 2 :(得分:1)

如果您想使用category,至少应该创建一个有用的类别。不使用self的类别中的实例方法是错误的。

由于您正在操纵UILabel,因此您应该将其设为UILabel类别。

@interface UILabel (PageTitle)
- (void)setPageTitle:(NSString *)text {
    UIColor *pageTextColor = [UIColor colorWithRed:18.0/255.0 green:79.0/255.0 blue:118.0/255.0 alpha:1.0];

    // Set page title
    UIFont *font = [UIFont fontWithName:@"PassionOne-Regular" size:23];
    [self setFont:font];
    [self setText: text];
    self.textColor = pageTextColor;
    self.shadowColor = [UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1.0];
    self.shadowOffset = CGSizeMake(0, 1);

    CGRect titleRect = [self textRectForBounds:self.bounds limitedToNumberOfLines:999];
    CGRect tr = self.frame;
    tr.size.height = titleRect.size.height;
    self.frame = tr;
}
@end

像这样使用它:

UILabel *myLabel;
[myLabel setPageTitle:@"Foobar"];

答案 3 :(得分:0)

添加快速方法是添加一个'+',使其成为另一个类中的静态方法:

UIKitUtilities.h

+ (void)setPageTitle:(UILabel *)title withText:(NSString *)text;

在m文件中:

+ (void)setPageTitle:(UILabel *)title withText:(NSString *)text { ...your code here... }