Xamarin.iOS 点击UIView整体变透明(包括子控件)问题

今天遇到一个奇葩的BUG,当我写了一些控件Add到一个UIView中。

运行后,在界面上点击其中的控件没有问题,但是我点击UIView空白区域时,整个UIView都变透明了,包括其中的子控件也透明了。

我猜测应该是默认的选中效果。

第一种:针对UIView中控件不需要点击事件

给UIView添加一个空的点击事件,代码如下:

uiView.AddGestureRecognizer(new UIGestureRecognizer());

运行后发现果然点击空白不会透明了,但是其中的子控件的点击事件也被屏蔽掉了。

第二种:针对一个初始界面可以显示完全的情况

出现这个问题的原因就是继承了MvxDialogViewController这个基类。所以一种方式是继承的基类换成MvxViewController。另一种方式是,我们自己写的一些view添加到Root中显示,那么我们添加的这些View作为了MvxDialogViewController中的TableView的Cell出现。框架默认的选中的style是点击后变透明,所以出现了这个bug。

解决方法:在添加完Root后遍历每一个Cell,设置他们选中的style即可,如下:

public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            TableView.SeparatorStyle = UITableViewCellSeparatorStyle.None;
            Root = (RootElement)GetRoot();

            //循环去掉选中效果
            var cell = Root.TableView.VisibleCells[0];
            cell.SelectionStyle = UITableViewCellSelectionStyle.None;
            var cell1 = Root.TableView.VisibleCells[1];
            cell1.SelectionStyle = UITableViewCellSelectionStyle.None;
            var cell2 = Root.TableView.VisibleCells[2];
            cell2.SelectionStyle = UITableViewCellSelectionStyle.None;
        }

这种方式呢,从方法字面意思上可以理解出,去掉的是正在显示在界面内的View的点击效果。当我们界面足够长,初始的界面显示不完的时候,那么,下面的一些UIView的点击效果还是会透明。

第三种:针对界面足够长,也是醉好的一种解决方式

其实这篇博客一开始只有上面两种解决方式,在我开发一段时间之后,测试自己的界面时,用了上面第二种方式的界面,拉到最下面还是会出现点击透明的问题。于是经过再一次尝试,写出本解决方法。

上面提到了,继承了MvxDialogViewController后,我们添加到Root中的View作为一个Cell出现,即可以把MvxDialogViewController当成是一个UI tableView(其实他就是!因为继承了它以后要设置UITableViewStyle)。那么UITableView中有Select方法,可以设置选中的行,MvxDialogViewController肯定也有。于是试着找了一下,真的有。于是复写下面Select方法,回调点击的参数:

public override void Selected(Foundation.NSIndexPath indexPath)
		{
			base.Selected(indexPath);

			// 根据点击的indexPath去掉选中效果
			Root.TableView.CellAt(indexPath).SelectionStyle = UITableViewCellSelectionStyle.None;
		
		}

搞定!!






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值