2010-11-17 2 views
1

Прежде всего, я начал с кода, приведенного ниже, в моем контроллере просмотра, но по причинам, которые работают для меня, мне нужно, чтобы приведенный ниже код находился в отдельном классе. Поэтому я создал класс CustomView, который я разместил ниже.Как настроить подкласс UIScrollView и подключить его в Interface Builder

На данный момент я могу создать экземпляр этого класса в моем контроллере представления, создать IBOutlet и подключить его к UIScrollView (или некоторому виду) в построителе интерфейса и получить такое же поведение , и как бы я сделал что-то подобное?

customView.m

#import <UIKit/UIKit.h> 
#import <QuartzCore/QuartzCore.h> 

@interface CustomView : UIScrollView <UIScrollViewDelegate> { 

    UIScrollView *scrollView; 
    UIImageView  *imageView; 

} 

@property (nonatomic, retain) IBOutlet UIScrollView  *scrollView; 
@property (nonatomic, retain) UIImageView    *imageView; 

customView.m

#import <UIKit/UIKit.h> 

@implementation CustomView 
@synthesize scrollView, imageView; 


    - (id)init { 

     if (self = [super init]) { 

      // Initialization code 
      UIImageView *temp = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"myImage.png"]]; 
      self.imageView = temp; 
      [temp release]; 

      scrollView.contentSize = CGSizeMake(imageView.frame.size.width, imageView.frame.size.height); 
      //Other Scroll View Properties 
      scrollView.delegate = self; 
      [scrollView addSubview:imageView]; 
     } 

     return self; 
    } 


    - (void)dealloc { 
     [scrollView release]; 
     [imageView release]; 
     [super dealloc]; 
    } 


    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 

     //Perform an action 

    } 

    @end 
+1

Что случилось со вторым UIScrollView? – Brandon

ответ

5

Вы можете создать экземпляр CustomView в IB довольно легко. Просто перетащите UIScrollView и расположите его, как хотите. Затем откройте Identity Inspector (cmd + 4) и измените класс на CustomView. Затем вы можете подключить его к розетке, как обычно.

+0

Так что мне нужно создать экземпляр этого класса в моем контроллере представления, а затем выделить и инициализировать, скажем, метод viewDidLoad? – cgossain

+0

Вы относитесь к этому как к любой другой розетке IB. Итак, добавьте ivar к вашему контроллеру, добавьте @property с помощью модификатора 'IBOutlet', @synthesize, отпустите его в' viewDidUnload' и 'dealloc' и, наконец, подключите розетку в IB. Затем к тому моменту, когда в вашем контроллере запускается метод 'viewDidLoad', экземпляр этого класса был бы полностью создан и добавлен к представлению контроллера. Все это происходит в фоновом режиме, вам не нужно выделять-инициализировать его самостоятельно. –

+1

Я сделал именно это, но, похоже, я не загружаю свое представление в прокрутку – cgossain

2

Вы действительно хотите UIScrollView внутри своего UIScrollView?

Ваш экземпляр scrollView должен быть равен нулю в вашем методе init, поэтому доступ к нему не будет работать должным образом.

Я не уверен, что вся конструкция/иерархия это то, что вы хотите ...

+0

, честно говоря, я пытаюсь создать настраиваемый элемент управления, который использует UIScrollView для слайд слева направо и считаю, что он работает очень хорошо. Единственное, что я хотел бы создать пользовательский класс для моего элемента управления, чтобы я мог подключиться к нему в конструкторе интерфейса очень и иметь особенности, выполняемые при скрытии – cgossain

+1

Тогда вы, вероятно, должны * либо * наследовать от UIScrollView * или * наследуют от обычного UIView и содержат один, но не оба. – Eiko