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 是发送者而不是启动选择器的按钮。我就是这样解决问题的:
创建了一个全局标签变量
int tag { get; set; }
在每个按钮的点击处理程序中分配了标签值。例如:
button.TouchUpInside += (object sender, EventArgs e) => {
tag = 0;
// Do other stuff here
};
在 switch 语句中使用 tag 变量。
我正在尝试通过处理程序中的发送者对象访问按钮。但是,我不断收到此异常:
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 是发送者而不是启动选择器的按钮。我就是这样解决问题的:
创建了一个全局标签变量
int tag { get; set; }
在每个按钮的点击处理程序中分配了标签值。例如:
button.TouchUpInside += (object sender, EventArgs e) => { tag = 0; // Do other stuff here };
在 switch 语句中使用 tag 变量。