2012-03-25 1 views
9

나는 지금 Monotouch를 배우려고하고 있으며 Mike BlueStein의 Monotouch 책을 배우기 위해 노력하고 있습니다. 나쁜 책은 아니지만, xcode 4 (나는 믿을 만하다.) 이후 약간 구식이되어 버렸고, 최신 버전의 모노 터치가 나왔다.Monotouch의 XIB 파일 정의보기에 사용자 정의보기를 추가하는 방법

어쨌든, 내 프로젝트에는 컨트롤러와 xib 파일이 있습니다. 또한 맞춤법보기 (예 : myview : UIView)를 사용하여 그리기 메소드를 재정의합니다. xib 파일에 정의 된보기 옆 또는 위에 사용자 정의보기를 표시하려고합니다. 어떻게해야합니까?

컨트롤러에서 LoadView 메서드를 재정의하고 뷰를 내 사용자 지정보기의 인스턴스로 설정하면 볼 수 있지만 xib 파일에 정의 된 모든 항목이 느슨합니다. 하위보기로 추가하려고하면 전혀 표시되지 않습니다.

무엇이 누락 되었습니까? 질문이 명확하지 않으면 저에게 물어보십시오. 그래서 제가 분명히 할 수 있습니다.

건배.

첫째, RegisterAttribute로보기 장식 :

[Register("MyView")] 
public class MyView : UIView 
{ 
} 

을 다음과 같은 생성자 구현 :

public MyView(IntPtr handle) : base(handle) {} 

+0

이 [SO 질문] (http://stackoverflow.com/questions/863321/iphone -nov-file-with-interface-builder를 사용하여로드하는 방법을 보여주는로드)은 도움이 될 수도 있습니다. – tipycalFlow

답변

22

은 XIB에서 사용자 지정보기를 사용하려면 다음 단계를 따르십시오 이 생성자는 런타임에서 메모리 경고에 의해 뷰가 삭제 된 후에 뷰를 다시 만들려고 할 때 필요합니다. (항상 MonoDevelop을 통해 더블 클릭에 의해) 엑스 코드에서

  • 열고 XIB 당신이 그것을 원하는 UIView를 추가 : 당신은 사용자 정의 클래스를 만든 후.
  • 은 엑스 코드에서, MYVIEW에있는 UIView의 클래스 (또는 중 이름은 당신이 RegisterAttribute에 전달)한다는 설정 :

Custom class for custom view

  • 컴파일 실행합니다.

편집 :

은 XIB에서로드 컨트롤러 LoadView을 무시하지 마십시오. LoadView은 해당 컨트롤러의보기가 XIB에서로드되지 않은 경우 컨트롤러의보기를 만들기위한 것입니다.

+0

건배. 완벽한 대답. –

3

감사합니다. Dimitris, 훌륭한 답변.

  1. 이 MonoDevelop에서 새로운 XIB 파일을 추가합니다 (예 : LoginView.xib)
  2. 을 : 나처럼 혼란을 얻을 사람들을 위해

    , 여기에 추가하고 부분/하위 뷰 같은 XIB 파일을 사용하는 simplist 절차입니다 새로운 (부분) 클래스를 추가하면 뷰에 대한 코드 숨김 파일 (custom-class)이됩니다.어떤 이름 으로든 "LoginView.cs")
  3. RegisterAttribte)와 Constrctor을 위의 exaplain으로 추가하십시오. Dimitris.
    1. LoginView.xib을 더블 클릭하여 Xcode IB에서 엽니 다. 그런 다음 필요한 경우 (예 : LoginView.cs)
  4. 는 콘센트 또는 조치를 추가하여 "코드 숨김 파일"을 가리 키도록 XIB 파일의 Custom Class 특성을 변경합니다. MonoDevelop는 .designer 파일을 생성하여 코드 숨김 파일에 첨부합니다. 여기서 모든 콘센트 및 작업을 볼 수 있습니다. 당신이보기를 추가 다음과 같이 .xib 파일을로드하려는 컨트롤러에서
  5. :

    VAR보기 = NSBundle.MainBundle.LoadNib ("LoginView을"이, 널 (null)); LoginView loginView = LoginView와 같은 Runtime.GetNSObject (views.ValueAt (0)); mainLayout.AddSubview (loginView); // mainLoyout는이 세 가지 라인이 flexaddicted 대답을 기반으로

내 주요의 ViewController의 자리입니다 here

관련 문제