2012-03-25 13 views
9

Tôi đang cố gắng học monotouch tại thời điểm này và theo dõi cuốn sách monotouch tìm hiểu của Mike BlueStein. Không phải là một cuốn sách xấu, nhưng nó hơi lỗi thời kể từ xcode 4 (tôi tin) và một phiên bản mới hơn trên monotouch đã đi ra.Cách thêm chế độ xem tùy chỉnh vào chế độ xem XIB đã được xác định trong monotouch

Dù sao, trong dự án của tôi, tôi có bộ điều khiển và tệp xib. Tôi cũng có chế độ xem tùy chỉnh (ví dụ: myview: UIView), ghi đè phương thức vẽ. Tôi muốn hiển thị chế độ xem tùy chỉnh của mình bên cạnh hoặc trên đầu chế độ xem được xác định trong tệp xib. Làm thế nào để tôi làm điều này?

Trong bộ điều khiển, Nếu tôi ghi đè phương thức LoadView và đặt Chế độ xem thành thể hiện của chế độ xem tùy chỉnh của tôi, thì tôi có thể thấy, nhưng tôi mất mọi thứ được xác định trong tệp xib. Nếu tôi cố gắng thêm dưới dạng chế độ xem phụ, nó hoàn toàn không xuất hiện.

Tôi đang thiếu gì? Nếu câu hỏi không rõ ràng, hãy hỏi tôi, vì vậy tôi có thể làm rõ.

Chúc mừng.

+0

này [SO câu hỏi] (http://stackoverflow.com/questions/863321/iphone -như-to-tải-a-view-sử dụng-a-nib-tệp-tạo-với-giao diện-xây dựng) có thể giúp – tipycalFlow

Trả lời

22

Thực hiện theo các bước sau để sử dụng một giao diện tùy chỉnh trong một XIB:

Thứ nhất, trang trí quan điểm với RegisterAttribute:

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

và thực hiện các constructor sau:

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

Hàm khởi tạo này là cần thiết cho khi thời gian chạy sẽ cố gắng tạo lại khung nhìn sau khi nó bị phá hủy bởi một cảnh báo bộ nhớ. Sau khi bạn đã tạo lớp tùy chỉnh của mình:

  • Mở XIB trong Xcode (luôn bằng cách nhấp đúp vào nó qua MonoDevelop) và thêm UIView vào nơi bạn muốn.
  • Trong Xcode, thiết rằng lớp UIView để MyView (hoặc bất cứ tên nào bạn truyền cho RegisterAttribute):

Custom class for custom view

  • Compile-Run.

EDIT:

Không ghi đè LoadView cho bộ điều khiển được nạp từ một XIB. LoadView có nghĩa là tạo chế độ xem của bộ điều khiển khi chế độ xem của bộ điều khiển không được tải từ XIB.

+0

Chúc mừng. Câu trả lời hoàn hảo. –

3

Cảm ơn Dimitris, câu trả lời hay.

Đối với những người bị lẫn lộn như tôi, đây là thủ tục simplist thêm và sử dụng một file xib như một phần/subview:

  1. Thêm một xib file mới trong MonoDevelop (tức LoginView.xib)
  2. Thêm một lớp (một phần) mới, đây sẽ là lớp tùy chỉnh (The Code-behind file hãy nói) cho khung nhìn.Đặt tên bất kỳ "LoginView.cs")
  3. Thêm thuộc tính (RegisterAttribte) và Constrctor dưới dạng exaplain ở trên Dimitris.
    1. Nhấp đúp vào LoginView.xib để mở nó trong XCode IB. Sau đó Thay đổi Custom Class Thuộc tính của file xib để trỏ đến "tập tin code-behind" của bạn (ví dụ LoginView.cs)
  4. Thêm bất kỳ cửa hàng hay hành động nếu bạn cần. MonoDevelop sẽ tạo một tệp .designer và đính kèm nó vào tệp mã-đằng sau của bạn, đây là nơi bạn có thể thấy tất cả các cửa hàng và hành động của mình.
  5. Trong điều khiển của bạn, nơi bạn muốn thêm quan điểm này, tải tập tin .xib của bạn như sau:

    var quan điểm = NSBundle.MainBundle.LoadNib ("LoginView", điều này, null); LoginView loginView = Runtime.GetNSObject (views.ValueAt (0)) dưới dạng LoginView; mainLayout.AddSubview (loginView); // nơi mainLoyout là giữ chỗ trong ViewController chính của tôi

Những ba dòng được dựa trên câu trả lời flexaddicted here