2011-11-04 4 views
1

툴바에 대한 사용자 정의보기로 UIBarButtonItem을 만들려고합니다. 뷰 자체는 잘 표시되지만 BarButton을 클릭하면 아무런 작업도 수행되지 않습니다. 터치 이벤트가보기에서 UIBarButtonItem 인스턴스로 전달되지 않은 것 같습니다. 응답 체인을 확인한 결과 잘 보입니다. 또한 인터넷을 검색하고 Apple 설명서를 확인했지만 내 문제의 힌트를 찾을 수 없습니다.사용자 정의보기가있는 UIBarButtonItem

g__objWeatherButton = new UIBarButtonItem[1]; 

    UIView l__objCustomView = g__objWeatherDisplay.InfoBarButton; // Returns a reference to my custom view 

    UIBarButtonItem l__objButton = new UIBarButtonItem(l__objCustomView); 

    l__objButton.Clicked += delegate {this.WeatherButtonEvent();}; // my action handler 
    l__objButton.Width = 200; 
    l__objButton.Enabled = true; 

    g__objWeatherButton[0] = l__objButton; 

    this.Items = g__objWeatherButton; // "this" is my UIToolbar object 

누군가가 나에게 문제가 힌트를 줄 수 : 여기

내 코드? 또는 작업 코드 샘플 (C#에서 - Objective-C에서 몇 가지 예를 발견했지만 분명히 중요한 트릭을 간과 했음) ;-)

답변

5

특별한 트릭이 없습니다. 도구 모음이나 탐색 모음에 사용자 지정보기를 추가하려면 해당보기의 이벤트를 구독 (및 응답)해야합니다. 따라서 UIView를 사용하여 이미지를 유지하는 대신 UIButtonType.Custom을 사용하여 UIButton을 만들고 해당 버튼의 TouchUpInside 이벤트에 가입하십시오.

그런 다음 당신이있는 UIView와 함께처럼 초기화 :

UIButton l__objCustomUIButton = UIButton.FromType(UIButtonType.Custom); 
//l__objCustomUIButton.SetImage(UIImage.FromFile("your button image"), UIControlState.Normal); 
l__objCustomUIButton.TouchUpInside += delegate { this.WeatherButtonEvent(); }; 
UIBarButtonItem l__objButton = new UIBarButtonItem(l__objCustomUIButton); 

그냥 당신이 클래스 범위에서 버튼을 선언해야합니다.

+0

숨바꼭질 디미트리 는 나도 이런 생각을했다,하지만 난 쉬운 방법이있을 것입니다 생각했기 때문에 나는 그것을 거부했다. 지금 나는이 방법으로 그것을 구현하고 잘 작동합니다. 당신의 도움을 주셔서 감사합니다! –

+0

내가 도와줬으면 좋겠다. –

+1

@ Jörn 허용 된 답변으로 표시하여 stackoverflow에서 검색하거나 읽는 모든 사람이 질문에 대한 대답을 즉시 알 수 있도록하십시오. 감사! – poupou

3

답변이 올바른 방향으로 나를 넣었지만 버튼을 표시하는 데 여전히 문제가있었습니다. 내가 다음을 추가 한 후에 만 ​​이미지와 함께 단추가 표시되었습니다.

l__objCustomUIButton.Frame = new System.Drawing.RectangleF (0, 0, 40, 40);

감사 바울은

0

이제 일반 도구 모음 단추처럼 반응하는 쉬운 방법 및 사용자 지정 버튼이 있습니다.

this.SetToolbarItems(new UIBarButtonItem[] { 
      new UIBarButtonItem(UIBarButtonSystemItem.Refresh, (s,e) =>  { 
       Console.WriteLine("Refresh clicked"); 
      }) 

      , new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace) { Width = 50 } 
      , new UIBarButtonItem(UIImage.FromBundle 
            ("wrench_support_white.png"), UIBarButtonItemStyle.Plain, (sender,args) => { 
       Console.WriteLine("Support clicked"); 
      }) 
     }, false); 
관련 문제