2012-04-02 4 views
1

Когда я установил цвет фона MonoTouch.Dialog для прозрачного изображения, он генерирует исключение, почему? и как настроить его на прозрачность.Как установить фон прозрачным на DialogViewController

Необработанное исключение: ссылка на объект не указывает на экземпляр объекта MyDialogViewController.LoadView() [0x00016] в MyDialogViewController.cs:: System.NullReferenceException ParentViewController.View.BackgroundColor = UIColor.Clear

public class MyDialogViewController: DialogViewController 
{ 
    public MyDialogViewController (RootElement root) : base (root) 
    { 
    } 

    public override void LoadView() 
    { 
     base.LoadView(); 
     this.TableView.BackgroundColor = UIColor.Clear; 
    ParentViewController.View.BackgroundColor = UIColor.Clear; 

    } 
} 


    public void xxxxx(){ 
     var menu = new RootElement(""){ 
      new Section ("Demo"){ 
       new EntryElement("Name", "",""), 
      }, 
     }; 

     var menuDVC = new MyDialogViewController (menu) { 
      Autorotate = true 
     }; 



     this.View.AddSubview(menuDVC.View); 
} 

ответ

1

NullReferenceExceptionскорее всего происходит потому, что ParentViewController является null.

В зависимости от того, как MyDialogViewController предъявляется это может быть из-за использования неправильного имущества и недавний, iOS5, change:

Перед прошивкой 5.0, если вид не имеет родительское представление контроллер и был представлен, контроллер представления представления будет возвращен. На iOS 5 этого поведения больше не происходит. Вместо этого используйте свойство presentingViewController для доступа к контроллеру представления представления.

Однако если MyDialogViewController является функция окна RootViewController, то это нормально для этих свойств быть null. В этом случае просто используя UIColor.Clear на TableView получите мне черный фон (у меня там ничего не было), поэтому этого должно быть достаточно для части MT.D. Если у вас есть родитель, вы можете попробовать установить его цвет фона для очистки (если необходимо) перед отображением MyDialogViewController.

+0

благодарит вас за ответ. перед отображением MyDiaogViewController (MT.D) я установил текущий UIView для UIClear, а также установил mtd.view.backgroudcolor & mtd.tableview.backgroundcolor для uiclear (opaque = false), затем добавит mtd.view к текущий вид (this.view.addsubview (mtd.view), но область mtd по-прежнему серая, я хочу отображать с прозрачным. Это странно. – BlueSky

+1

menuDVC (это контроллер просмотра MTD) menuDVC.View.Frame = new RectangleF (20,90,300,550); \t \t \t menuDVC.View.BackgroundColor = UIColor.Clear; \t \t \t menuDVC.View.Opaque = ложь; \t \t \t menuDVC.TableView.BackgroundColor = UIColor.Clear; \t \t \t \t menuDVC.TableView.Opaque = false; \t \t \t это.View.AddSubview (menuDVC.View); – BlueSky

+0

Рад, что у вас это получилось :) – poupou

Смежные вопросы