Xamarin ios - 从发件人访问标签 属性 时出错

Xamarin ios - Error while accessing tag property from sender

我正在尝试通过处理程序中的发送者对象访问按钮。但是,我不断收到此异常:

Specified cast is not valid.

我知道这是一个简单的问题,但有人可以帮我看看我遗漏了什么吗?它也不必具体是标签,我只想知道点击了哪个按钮。

这是我得到异常的行:

var tag = ((UIButton)sender).Tag;


protected void Handle_FinishedPickingMedia (object sender, UIImagePickerMediaPickedEventArgs e)
    {
        try{

            //determine what was selected, video or image
            bool isImage = false;
            switch(e.Info [UIImagePickerController.MediaType].ToString()) {
            case "public.image":
                Console.WriteLine("Image selected");
                isImage = true;
                break;
            }
// if it was an image, get the other image info
            if(isImage) {
                // get the original image
                UIImage originalImage = e.Info[UIImagePickerController.OriginalImage] as UIImage;
                if(originalImage != null) {
                    // do something with the image

                    new Thread(new System.Threading.ThreadStart(() => {
                        Thread.Sleep(350);

                        BeginInvokeOnMainThread (() => {

                            var tag = ((UIButton)sender).Tag;

                            //UIButton senderButton = (UIButton)sender;

                            switch(tag)
                            {
                            case 0:
// do something here

                                break;
                            case 1:

// do something here                                    
break;
});
                    })).Start();
                }
            } 
            // dismiss the picker
            imagePicker.DismissModalViewController (true);
}catch(Exception ex)
        {
            ShowAlert ("Failed !", "Unable to select image", "");

            Console.WriteLine(ex.Message + ex.StackTrace);

        }
    }

尝试这样的事情:

UIButton button = sender as UIButton;
var tag = button.tag;

您还可以为 "button" 为空的情况添加一些检查,例如。发件人不是 UIButton

根据 Jason 的上述建议,UIImagePickerController 是发送者而不是启动选择器的按钮。我就是这样解决问题的:

  1. 创建了一个全局标签变量

        int tag { get; set; }
    
  2. 在每个按钮的点击处理程序中分配了标签值。例如:

    button.TouchUpInside += (object sender, EventArgs e) => {
    
                tag = 0;
    
                // Do other stuff here
            };
    
  3. 在 switch 语句中使用 tag 变量。