2012-07-06 19 views
5

Jestem nowy iPad deweloperKonwersja UIViewController do UIScrollViewController

Zrobiłem jeden formularz rejestracyjny w mojej aplikacji, kiedy widzę moją aplikację w trybie Portrait, jestem w stanie zobaczyć cały formularz bez przewijania, ale kiedy widzę ten sam formularz w trybie Landscape, nie widzę części, która znajduje się na dole strony, ponieważ tam powinno być przewijanie, aby zobaczyć dolną część.

s: W moim pliku .h kiedy wymienić

@interface ReminderPage : UIViewController{ 
... 
... 
} 

:UIViewController z :UIScrollView

i wtedy kiedy dodać etykietę w moim pliku jak to .m,

UILabel *Lastpaidlbl = [[[UILabel alloc] initWithFrame:CGRectMake(70 ,400, 130, 50)]autorelease]; 
    Lastpaidlbl.backgroundColor = [UIColor greenColor]; 
    Lastpaidlbl.font=[UIFont systemFontOfSize:20]; 
    Lastpaidlbl.text = @"Lastpaid on :"; 
    [self.view addSubview:Lastpaidlbl]; 

jestem błąd na ostatniej linii Nie znaleziono widoku właściwości obiektu typu classname. Nie mogę dodać etykiety w moim widoku.

Każda pomoc zostanie doceniona.

+1

Zazwyczaj używa się [notacja wielbłądziego] (http://en.wikipedia.org/wiki/CamelCase) dla nazw zmiennych w Obj-C. Ułatwia nam to odczytanie –

+0

Jeśli zamienisz UIViewController na UIScrollView, oczekuję, że twoja aplikacja nawet nie skompiluje się, a jeśli to zrobi, otrzymasz natychmiastową awarię z oślepiająco oczywistym komunikatem o błędzie. Dlatego nie możesz zrobić tego, o czym mówi twoje pytanie. Przeczytaj różnicę między widokiem a kontrolerem widoku. –

Odpowiedz

4

Jeśli chcesz zamienić swój UIViewController na UIScrollView, będziesz musiał przejść trochę refaktoryzacji swojego kodu. Błąd masz jest tylko przykładem, że:

składnia:

[self.view addSubview:Lastpaidlbl]; 

jest poprawna, jeśli self jest UIViewController; od kiedy zmienił go być UIScrollView, powinieneś teraz zrobić:

[self addSubview:Lastpaidlbl]; 

Trzeba będzie sporo zmian, takich jak ten, aby do kodu i zmierzy się pewne problemy.

Innym podejściem byłoby to:

  1. instancji UIScrollView (nie czerpią z niej);

  2. dodaj swoje UIView (takie, jak je zdefiniowałeś) do widoku przewijania;

  3. Zdefiniuj contentSize widoku przewijania tak, aby zawierał cały UIView, który masz.

Widok przewijania działa jak kontener dla istniejącego widoku (dodajesz kontrolki do widoku przewijania, a następnie dodajesz widok przewijania do self.view); w ten sposób możesz zintegrować go z istniejącym kontrolerem:

 1. UIScrollView* scrollView = <alloc/init> 

     2. [self.view addSubview:scrollView]; (in your controller) 

     3. [scrollView addSubview:<label>]; (for all of your labels and fields). 

     4. scrollView.contentSize = xxx; 

Myślę, że to drugie podejście będzie znacznie łatwiejsze.

0

Proszę umieścić wszystkie swoje UIComponents w widoku UIScroll, a następnie rozpocznie przewijanie.

proszę sprawdzić rozmiar treści. zmień go zgodnie z orientacją urządzenia.

+0

Nie chcę zmieniać rozmiaru treści zgodnie z orientacją. Chcę przewijać w widoku. LUB jak dodać komponenty do UIScrollView? – Krunal

+0

Jeśli korzystasz z pliku XIB, zrób widok przewijania i umieść go poza widokiem głównym, a jego wysokość większą niż rozmiar ekranu umieść cały inny składnik interfejsu użytkownika w tym widoku przewijania. po wprowadzeniu UIComponents umieścić widok przewijania na mainview. i przy pomocy inspektora określić rozmiar treści. (wtedy nie będzie potrzeby zmiany rozmiaru zawartości raz po raz) –

0

Podklasy są podklasy UIScrollView, więc nie ma self.view, ponieważ już self jest widok (z przewijania). Nie musisz podklasować przewijania, możesz po prostu osadzić swoje komponenty w przewijanym ivarie i ustawić jego contentSize (w twoim przypadku musisz włączyć przewijanie właśnie wtedy, gdy urządzenie jest w trybie poziomym). W narzędziu do tworzenia interfejsów możesz osadzić wybrane elementy jednym kliknięciem, Edytor-> Osadź w> przewijanie.

0

najpierw tworzyć Scrollview

UIScrollView * scr=[[UIScrollView alloc] initWithFrame:CGRectMake(10, 70, 756, 1000)]; 
    scr.backgroundColor=[UIColor clearColor]; 
    [ self.view addSubview:scr]; 

drugi

zmiana [self.view addSubview:Lastpaidlbl];

 to 

[SCR addSubview: Lastpaidlbl];

trzeci

zestaw wysokość zależy od zawartości

UIView *view = nil; 

NSArray *subviews = [scr subviews]; 


CGFloat curXLoc = 0; 

    for (view in subviews) 
    { 
     CGRect frame = view.frame; 
     curXLoc += (frame.size.height); 
    } 
     // set the content size so it can be scrollable 
    [scr setContentSize:CGSizeMake(756, curXLoc)]; 

Wreszcie

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Override to allow orientations other than the default portrait orientation. 
    if (interfaceOrientation==UIInterfaceOrientationLandscapeLeft || interfaceOrientation==UIInterfaceOrientationLandscapeRight) { 
     self.scr.frame = CGRectMake(0, 0, 703,768);  

     } else { 
     self.scr.frame = CGRectMake(0, 0, 768, 1024); 
     } 


    return YES; 
} 
+0

Napisałem twój kod w 'viewdidload' ale to nie działa :( – Krunal

+0

sprawdź, czy moja zmieniona odpowiedź – Rams

+0

nadal nie działa. :( – Krunal

6

Pytanie wydaje się być naprawdę pytaniem, jak można wszystkie elementy na ekranie być umieszczone wewnątrz UIScrollView, a nie UIView. Używając Xcode 4.6.3, stwierdziłem, że mogę to osiągnąć przez:

  • W Konstruktorze interfejsów wybierz wszystkie widoki podrzędne w głównym interfejsie UIView.
  • Wybierz pozycję menu Xcode "Edytor | Osadź w | Widok przewijania".

Końcowym wynikiem był nowy widok przewijania osadzony w istniejącym głównym UIView, wszystkie poprzednie widoki podrzędne UIView będą teraz podprzeglądami UIScrollView, z tym samym pozycjonowaniem.

Powiązane problemy