如何在iPhone应用程序中使用单身?

时间:2011-10-17 12:47:04

标签: objective-c ios4 singleton themes ios-4.2

你好,这是iphone开发的新手。

我的申请中有5个主题。

我有每个主题的静态图像(标签n按钮和所有),但我不知道我如何应用或更改整个应用程序的新主题。我通过单身人士阅读但无法理解如何使用它来更改整个应用程序的图像。

有没有其他方法可以将主题应用于应用程序,或者单例是唯一的方法,如果是,那么我该如何使用它。

编辑:这是我的单身类代码,但我找不到任何方法来实现各种主题的图像。

#import "MyClass.h"




@implementation MyClass

+ (MyClass *)sharedInstance
{
    static MyClass *instance;
    @synchronized(self)
    {
    if(!instance)
    {
        instance = [[MyClass alloc] init];
    }
    }

return instance;
}

2 个答案:

答案 0 :(得分:2)

您应该查看iOS 5中的UIAppearance代理。对于早期版本,单例方法似乎没问题,您要求更改其各种图像的单例的外观更改,然后发送通知(NSNotification)以通知任何感兴趣的方谁想要相应地更新他们的界面。或者,您可以在单例属性上设置键值观察器(KVO),以便在其中一个属性发生更改时自动通知它们。

This post向您展示了如何实现单例。它只是一种能够从任何地方访问同一个类实例的方法。 Here是关于单身设计模式的讨论的链接,以及更复杂的“纯粹”单例实现。

答案 1 :(得分:0)

如果要更改图像,请单击以下代码,这可能很有用。否则,如果要动态更改它们,请使用带有NSTimer委托方法的Action方法中的代码。

Drag and drop some images in bundle and pass their names to array.

singleton .h file
#import <Foundation/Foundation.h>

@interface SingleTon : NSObject
{

}

+(SingleTon *) createSingleTon;

-(NSString *) returnImage:(NSString *) imageIs;
@end



singleton .m file
@implementation SingleTon

+(SingleTon *) createSingleTon
{
    static SingleTon *single= nil;
    if (single == nil) {

        single = [[SingleTon alloc] init];
    }
    return single;
}

-(NSString *) returnImage:(NSString  *) imageIs
{
    return imageIs;
}
@end



 viewcontroller .h file
    #import <UIKit/UIKit.h>
    #import "SingleTon.h"
    @interface ViewController : UIViewController<UITextFieldDelegate>
    {
        SingleTon *sing;
        IBOutlet UIImageView *displayImage;
       // connect this outlet imageview in xib.
        NSArray *imagesArray;
        int i;

    }
    -(IBAction)changeImage:(id)sender;
    @end

viewcontroller .m文件

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    imagesArray = [[NSArray alloc] initWithObjects:@"images.jpg",@"images1.jpg",@"images2.jpg",@"images4.jpg", nil];
    i = 0;
    sing = [SingleTon createSingleTon];
    // Do any additional setup after loading the view, typically from a nib.
}

-(IBAction)changeImage:(id)sender
{

    if (i<[imagesArray count]) {
        displayImage.image = [UIImage imageNamed:[sing returnImage:[imagesArray objectAtIndex:i]]];

    }
    i++;


}