2011-12-02 21 views
5

Bazı projelerimdeki harika MonoTouch.dialog'u şimdi kullanıp bir sorum var. Kullanıcının ev durumunu seçmesine izin vermek için kullandığım bir RadioGroup var, States bir dizi dizisidir.RadioGroup Öğesi Seçildiğinde açılan pencereyi kapatma

public static RootElement CreateStates() 
    { 
     return new RootElement ("State", new RadioGroup (0)) 
     { 
      new Section ("Choose State") 
      { 
       from x in States 
        select (Element) new RadioElement (x) 
      } 
     }; 
    } 

Bu iyi çalışır ve ben devlet seçtiğinizde açılan görünür ve ben durumumu almak, ama sonra geri ana ekrana almak için gezinme çubuğunda bulunan geri düğmesine basın gerekiyor. Bir seçim seçtiğimde bu açılır pencerenin kapanmasının bir yolu var mı? Geri düğmesine basmak sinir bozucu. Yoksa sadece tamamen yanlış çözümü mi kullanıyorum?

İlk düşüncem RadioElement'i alt sınıflara ayırmak ve seçili olayı yakalamaktı, ancak o zaman otomatik seçim açılır penceresinin nasıl iptal edileceğinden hala emin değildim?

cevap

13

Bu sabah aynı sorunla karşılaştım ve aynı zamanda değişiklik için bir olayı tetiklemek istedim, böylece veriler düzenlendiğinde iletişim kutusunda "iptal" düğmesi ekleyebilirim. Her iki görev de, RadioElement alt sınıfını seçmenizi ve Seçilmiş yöntemi geçersiz kılmanızı gerektirir - kullanıcı önceden seçilmiş olan öğeyi tıklarsa iletişim kutusunun KAPATMAMI sağlamak için ek bir adımı not edin - daha önce istediğim şekilde seçilmiş olsa bile herhangi bir şeyi tıklarsanız tetiklenir Buna karşı koru - benimki böyle görünüyor.

public class MyRadioElement : RadioElement { 
    // Pass the caption through to the base constructor. 
    public MyRadioElement (string pCaption) : base(pCaption) { 
    } 

    // Fire an event when the selection changes. 
    // I use this to flip a "dirty flag" further up stream. 
    public override void Selected (
     DialogViewController pDialogViewController, 
     UITableView pTableView, NSIndexPath pIndexPath) { 
     // Checking to see if the current cell is already "checked" 
     // prevent the event from firing if the item is already selected. 
     if (GetActiveCell().Accessory.ToString().Equals(
      "Checkmark",StringComparison.InvariantCultureIgnoreCase)) { 
      return; 
     } 

     base.Selected (pDialogViewController, pTableView, pIndexPath); 

     // Is there an event mapped to our OnSelected event handler? 
     var selected = OnSelected; 

     // If yes, fire it. 
     if (selected != null) { 
      selected (this, EventArgs.Empty); 
     } 

     // Close the dialog. 
     pDialogViewController.DeactivateController(true); 
    } 

    static public event EventHandler<EventArgs> OnSelected; 
} 
+0

Siz adamsınız! Çok teşekkürler. Yakındım, eksik olduğum diyaloğu kapatmak nasıldı. Bu tam ihtiyacım olan şey. – russellj

+0

Harika. Bunu da kullanabilirim: P. russellj bunu kabul edilen cevap olarak işaretleyebilir mi? – Bart

İlgili konular