iOS 5 SDK Создание методов, которые работают везде - PullRequest
2 голосов
/ 10 февраля 2012

Как вы делаете методы, которые работают через несколько представлений?Например.Я создал это:

- (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;
}

Я хочу иметь возможность вызывать метод setPageTitle для UILabels в разных представлениях.Как мне это сделать?Где я могу поместить этот код, чтобы он работал?Я только хочу поместить это в 1 файл и заставить это работать в различных представлениях.Спасибо.

Ответы [ 4 ]

9 голосов
/ 10 февраля 2012

Я бы предложил сделать эту категорию в классе 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 голос
/ 10 февраля 2012

Если вы хотите использовать категорию , вы должны хотя бы создать полезную категорию.Метод экземпляра в категории, который не использует 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"];
1 голос
/ 10 февраля 2012

То, что вы, вероятно, ищете, это либо вы создаете подкласс UIViewController (я полагаю, это то, что вы используете) и делаете его своим классом MyUIViewController, используя его как метод, либо вы можете создатькатегории UIViewController и добавьте этот метод. Здесь - это объяснение того, как создать категорию, плюс некоторая полезная информация.Категория - это расширение возможностей класса, в значительной степени то, что вы пытаетесь сделать.

0 голосов
/ 10 февраля 2012

Добавить быстрый способ - добавить '+', сделав его статическим методом в другом классе:

UIKitUtilities.h

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

А в файле м:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...