SORU
12 ŞUBAT 2012, Pazar


Nasıl özel iOS görünümü bir sınıf oluşturun ve birden çok kopyasını (İB) oluşturmak mı?

Şu anda temelde hepsi aynı olan birden fazla zamanlayıcılar, var olacak bir uygulama yapıyorum.

Zamanlayıcıları kodu yanı sıra animasyonlar/düzeni tüm kullanan özel bir sınıf oluşturmak istiyorum, bağımsız olarak faaliyet gösteren 5 aynı zamanlayıcılar birbirimize sahip olabilirsiniz.

Düzeni sayaçları için kodu şu anda sadece viewcontroller sınıfı tüm İB (Güncellemelerinden 4.2) ve kullanarak oluşturdum.

Zorluk özel bir sınıfa şeyi saklanması ve viewcontroller eklemek için nasıl, herhangi bir yardım çok mutluluk duyacağız beynimin sarma yaşıyorum.

CEVAP
12 ŞUBAT 2012, Pazar


Peki kavramsal olarak cevaplamak için, büyük olasılıkla sizin zamanlayıcı NSObject yerine UIView bir alt sınıfı olmalıdır.

Sadece görünüm UIView Bir damla sürükleyin dışarı İB zamanlayıcı örnek denetleyicisi görünüm oluşturmak için, ve bir zamanlayıcı sınıfı adına sınıf ayarlayın.

enter image description here

#import görünümü denetleyicisi zamanlayıcı sınıf için hatırlıyorum.

Tasarım kodu örnekleme Revizyon Tarihi görmek için () İB . Edit:

Değilim çok tanıdık ile film şeridi, ama biliyorum ki Senin inşa arayüzü kullanarak bir İB .xib hangi dosya ise hemen hemen aynı kullanarak film şeridi sürümü; gerekir bile olması mümkün kopyala & yapıştır görüşlerini bir bütün olarak sizin mevcut arayüzü .xib dosya.

.xib yeni bir boş "MyCustomTimerView.isimli oluşturdum bu test için". xib Bir görünüm ekledim ve bu etiket ve iki düğme eklendi. Bunun Gibi

enter image description here

Objective-C yeni bir sınıf UIView adlı sınıflara yarattım"". MyCustomTimer .xib İ koymak benimDosya Sahibisınıf olmakMyCustomTimer. Şimdi başka bir görünüm/denetleyici gibi eylemler ve çıkışları bağlamak için özgürüm. .h sonuç dosyası bu gibi görünüyor:

@interface MyCustomTimer : UIView
@property (strong, nonatomic) IBOutlet UILabel *displayLabel;
@property (strong, nonatomic) IBOutlet UIButton *startButton;
@property (strong, nonatomic) IBOutlet UIButton *stopButton;
- (IBAction)startButtonPush:(id)sender;
- (IBAction)stopButtonPush:(id)sender;
@end

Tek engel atlamak için sol, bu UIView benim sınıfı .xib oluyor. .xib kullanarak Kur gerekli ölçüde kesiyor. Ve şeritleri sayaçları yüklemek için kullanıyorsun beri -(id)initWithCoder: adlı tek başlatıcı olduğunu biliyoruz. Uygulama dosyası şu şekilde görünür:

#import "MyCustomTimer.h"
@implementation MyCustomTimer
@synthesize displayLabel;
@synthesize startButton;
@synthesize stopButton;
-(id)initWithCoder:(NSCoder *)aDecoder{
    if ((self = [super initWithCoder:aDecoder])){
        [self addSubview:
         [[[NSBundle mainBundle] loadNibNamed:@"MyCustomTimerView" 
                                        owner:self 
                                      options:nil] objectAtIndex:0]];
    }
    return self;
}
- (IBAction)startButtonPush:(id)sender {
    self.displayLabel.backgroundColor = [UIColor greenColor];
}
- (IBAction)stopButtonPush:(id)sender {
    self.displayLabel.backgroundColor = [UIColor redColor];
}
@end

Yöntemi loadNibNamed:owner:options: isminde olduğu gibi sesler tam olarak ne yapar. Bu Uç yükler ve "Dosya Sahibi" self. özellik setleri Biz dizideki ilk nesneyi ayıklamak ve bu Uç kök görünümü. Biz bir küme olarak görünüm eklemek ve ekranda Oldunuz.

Tabi bu sadece düğmeye basıldığında, etiketin arka plan rengini değiştirir, ama bu örnek, yolda olsun.

Notlar yorum:

Eğer sonsuz özyineleme sorunları alıyorsanız muhtemelen bu çözüm ince numara cevapsız dikkati çekiyor. Yaptığını düşündüğün bir şey değil. Film şeridi koymak olduğu görüşünü görmedim, ama onun yerine yükler başka bir küme olarak görüntüleyebilirsiniz. Yükleyen ucu olarak tanımlanan görüştür görüntüleyin. "Dosya sahibi" olarak ucu görünmeyen görünüm. İlginç kısım bu görünmeyen görünüm hala ucu onu getiren görüntülemek için türlü görünüm kontrolörü olarak kullanılan Objective-C sınıfı. Örneğin IBAction yöntemleri MyCustomTimer sınıfta bir görüşe nazaran görünümü denetleyicisi daha beklediğiniz bir şey vardır.

Bir yan not olarak, bu MVC tatili öne sürebilir ve biraz katılıyorum. Benim açımdan daha yakından bir özel güvenlik ile ilgili de bazen parçası denetleyicisi olarak hangi UITableViewCell,.

Ayrıca bu cevap çok özel bir çözüm sağlamak için olduğunu belirtmekte fayda vardır; birden fazla kez oluşturulabileceği bir uç oluşturmakaynı görünümbir film şeridi konuldu. Örneğin, kolayca bu zamanlayıcılar altı bir anda bir iPad ekranı üzerinde düşün. Eğer sadece birden çok kez uygulama genelinde kullanılacak bir görünüm denetleyicisi için bir view belirtmek gerekirse the solution provided by jyavenard to this question neredeyse kesinlikle sizin için iyi bir çözümdür.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Microsoft Research

    Microsoft Re

    24 EKİM 2008
  • PaulGBelliveau

    PaulGBellive

    5 Mart 2009
  • SuppressedStorm

    SuppressedSt

    11 AĞUSTOS 2013