2012-05-22 2 views
0

정적 콘텐츠가 포함 된 스토리 보드 및 테이블 뷰를 사용하고 있습니다. 내부적으로는 UITableViewController이 암시 적으로 UITableView의 출처가 된 것처럼 보입니다.MonoTouch : UITableView의 데이터 소스로 UITableViewController를 사용하는 방법?

이제 정적 컨텐츠에 영향을주고 싶다면 테이블 소스의 메소드를 대체해야합니다. 오브젝티브 -c에서 난 그냥 내 컨트롤러

-(NSString*)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
{ 
    if (section == 0) 
     return @"HELLO!"; 
    else { 
     return [super tableView:tableView titleForHeaderInSection:section]; 
    } 
} 

을 배치 할 수 있습니다 및 방법은 무시됩니다. 그러나 MonoTouch에서는 이것이 작동하지 않습니다. 대리자 또는 데이터 소스의 새 인스턴스를 만들지는 않으므로 유의하십시오. 정적 셀의 경우 컨트롤러 은 소스/위임자 인입니다. ObjectiveC에서 이것은 컨트롤러가 해당 프로토콜을 구현하도록함으로써 수행됩니다. 여기

내가이 주제와 관련된 질문 한 질문이다하지만 지금은 MonoTouch에 솔루션을 변환 붙어 : 모노 터치에서

How to override tableView:titleForHeaderInSection: to adjust section headers of static UITableViews?

답변

5

는 자 마린의 웹 사이트에 큰 튜토리얼에서 솔루션을 찾았 http://docs.xamarin.com/ios/tutorials/Events%2c_Protocols_and_Delegates

은 "Export"속성이 트릭을 수행합니다!

public partial class TestController : UITableViewController 
    { 
     public TestController (IntPtr handle) : base (handle) 
     { 

     } 

     public override void ViewDidLoad() 
     { 
      base.ViewDidLoad(); 
     } 

     [Export("tableView:titleForHeaderInSection:")] 
     public string TitleForHeaderInSection(UITableView oTableView, int iSection) 
     { 
      return "TEST"; 
     } 
    } 
+0

'[Export ("tableView : didSelectRowAtIndexPath :")]'시도했지만 결코 호출되지 않습니다. 더 많은 것을 추가합니까? – testing

+1

@testing 컨트롤러를 'WeakDelegate'또는 'WeakSource'로 설정해야합니다. 정확한 속성을 기억하지 못합니다. – Krumelur

+0

WeakDelegate는 나에게 뭔가를 말합니다. 나는 다음에 그것을 필요로 할 때 그것을 시도 할 것이다. – testing

-1

당신이 데이터 소스의 위임을 만들어야합니다. 이 블로그 게시물의 데모처럼

: 머리글 섹션의 제목을 사용자 정의하려면 http://sabonrai.wordpress.com/2009/08/28/monotouch-sample-code-uitableview/

 public override string TitleForHeader (UITableView tableView, int section) 
     { 
     //do your stuff 
     } 

단지 TableViewDelegate 당신을 titleForHeaderInSection 우선합니다.

+0

알고 있습니다. 그러나 특별한 경우에, UITableViewController _는 대리자입니다. 그래서 나는 다른 것을 만들고 싶지 않습니다. 난 그냥 프로토콜을 구현하는 어떻게 든 내 컨트롤러를 알려 드리고자합니다. – Krumelur

+0

.NET에서 여러 클래스로 상속하는 클래스를 가질 수 없습니다. 여러 인터페이스 만 있지만 UITableViewDataSource는 인터페이스가 아닙니다. 따라서 UITableView에 대한 별도의 대리자를 만들어야합니다. Objective-C에서는 둘 이상의 프로토콜을 구현하는 클래스를 가질 수 있습니다. 이 문서도 참고하십시오 http://docs.xamarin.com/ios/tutorials/Events_Protocols_and_Delegates "Protocols Deep Dive" – Lars

관련 문제