以不同模式加载UIView表单

时间:2014-08-04 21:49:12

标签: ios uiviewcontroller xamarin.ios uibutton xamarin

我已经有2个不同的UIViewController设置了。父视图上有一个UIBarButtonItem,当用户点击它时,它会加载一个表单(第二个UIView)。

但在UIBarButtonItem上,我有一个弹出视图。因此,当他们点击按钮时,popover会显示6个不同的UIButton,当他们选择一个时,表单会加载。请看下面的图片,看看我在说什么。

http://oi58.tinypic.com/f0cbae.jpg

这是因为6种不同UIButton的形式不同。

如何在不同模式下加载相同的表单? 如果单击Button1,表单将如何知道选择了哪种模式? 我认为我需要课程参数,但无法使其正常工作。

============ 编辑:

这就是我的尝试:

public partial class AddAbsence_iPhone : UIViewController {
    public void absenceTypeSelection (string mode) {  
        if (mode == “Button1”) {  
            this.lbl_AbsenceType.Text = “Button1”;  
        }  else if (currentAbsenceType == "Button2”) {
            this.lbl_AbsenceType.Text = "Button2";
        }  else if (currentAbsenceType == "Button3”) {
            this.lbl_AbsenceType.Text = "Button3”;
        }  else if (currentAbsenceType == "Button4”) {
            this.lbl_AbsenceType.Text = "Button4”;
        }  else if (currentAbsenceType == "Button5”) {
            this.lbl_AbsenceType.Text = "Button5”;
        }  else if (currentAbsenceType == "Button6”) {
            this.lbl_AbsenceType.Text = "Button6;
        }  
    }
}

这就是我将事件添加到其中一个按钮的方式。

public partial class Absensehome_iPhone : UIViewController {
AddAbsence_iPhone addAbsence;
    public override void ViewDidLoad () {
        button2.TouchUpInside += (sender, e) => {
            this.addAbsence = new AddAbsence_iPhone(this);
            this.NavigationController.PushViewController(addAbsence,true);
            addAbsence.absenceTypeSelection("Button2");
        };
    }
}

Absencehome_iPhone是父视图控制器 AddAbsence_iPhone是表单,单击按钮后我想显示该表单

当我运行时,我收到以下错误:
对象引用未设置为对象的实例

1 个答案:

答案 0 :(得分:0)

如果您要从UIPopoverController进行演示,则必须具有UIViewController子类。我假设同一个班级是你在听按钮的地方。使用UIButton,可以通过使用以下命令注册侦听器来完成:

- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents

因此,您可以为该列表中的每个按钮注册一个不同的方法。

- (void)viewDidLoad
{
    [self.button1 addTarget:self action:@selector(button1Tapped:) forControlEvents:UIControlEventTouchUpInside]; 
    [self.button2 addTarget:self action:@selector(button2Tapped:) forControlEvents:UIControlEventTouchUpInside]; 
}

如果您以编程方式生成这些按钮,或者还有一些其他充分理由说明为什么您无法通过注册不同的处理程序来控制流程,则可以为所有按钮注册一个处理程序,并检查按钮的文本作为发送者'被挖掘并传递的内容参数:

- (void)viewDidLoad
{
    [self.button1 addTarget:self action:@selector(aButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; 
    [self.button2 addTarget:self action:@selector(aButtonTapped:) forControlEvents:UIControlEventTouchUpInside]; 
}

- (IBAction)aButtonTapped:(id)sender
{
    if ([sender isKindOfClass:UIButton.class])
    {
        UIButton* buttonTapped = (UIButton*)sender;
        if ([buttonTapped.titleLabel.text isEqualToString:@"Button1"])
        {
            [self button1Tapped];
        }
        else if ([buttonTapped.titleLabel.text isEqualToString:@"Button2"])
        {
            [self button2Tapped];
        }
    }
}