澳门美高梅手机网站斯维夫特开发小技巧–TabBar中间按钮的拉长方案

TabBar中间按钮的丰裕方案

澳门美高梅手机网站 1

那二日做OA时用到GridView展现数据。
为了升高用户体验。想写八个单机行的轩然大波。
结果发现GridView竟然没有这几个事件  只好求助百度大神了。

事先做百思项目标时候,也有1个个中按钮,当时是重写的TabBar,那里介绍三个新的章程

  • 给TabbarVC多添加添加一个控制器,这一个控制器的功力只是是用来占位的,多了这几个控制器中间才会空出2个按钮的地点,不设置文字,不设置图片

// 加号按钮的位置
self .addChildViewController("NullViewController", title: "", normalImage: "")
  • 懒加载按钮,注意swift懒加载的书写

    // MARK: - 懒加载
    private lazy var composeBtn : UIButton = {

        () -> UIButton in // 懒加载本质是闭包,只是将这行省略了

        // 初始化按钮
        let composeBtn = UIButton()
        // 设置按钮图片
        composeBtn.setImage(UIImage(named: "tabbar_compose_icon_add"), forState: UIControlState.Normal)
        composeBtn.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"), forState: UIControlState.Highlighted)
        // 设置背景图片
        composeBtn.setBackgroundImage(UIImage(named: "tabbar_compose_button"), forState: UIControlState.Normal)
        composeBtn.setBackgroundImage(UIImage(named: "tabbar_compose_button_highlighted"), forState: UIControlState.Highlighted)

        // 给按钮添加点击事件
        composeBtn.addTarget(self, action: Selector("composeBtnClick:"), forControlEvents: UIControlEvents.TouchUpInside)
        // 设置按钮的尺寸
        composeBtn.sizeToFit()
        return composeBtn
    }()
  • 合适的不二法门里面添加按钮,那里怎么要强调合适吗,因为事先为了空出按钮的岗位,往TabBarVC中添加了1个占位的控制器,同时系统会在TabBar相应的职位添加二个BarButtonItem.自定义按钮假如添加在BarButtonItem以前在viewDidLoad方法里面,那么自定义按钮的单机事件就会被阻挡.

澳门美高梅手机网站 2

    override func viewWillAppear(animated: Bool) {

        super.viewWillAppear(animated)
        // 添加中间按钮
        // 按钮在viewDidLoad中添加,会被系统的BarButtonItem挡住,处理不了事件了
        // viewWillAppear中添加按钮,在系统的BarButtonItem之后添加
        self.tabBar.addSubview(composeBtn)
        // 设置按钮的位置
        let rect = self.tabBar.frame
        let width = rect.width / CGFloat(childViewControllers.count)
        composeBtn.frame = CGRect(x: 2 * width, y: 0, width: width, height: rect.height)
    }

末尾终于找到了化解办法。好了 废话不多说了。 贴上代码

先是 在前台设置三个躲藏的ButtonField

<Columns>
                    <asp:ButtonField Visible="False" Text="SingleClick" CommandName="SingleClick" />
</Columns>

然后在RowDataBound和RowCommand事件里写上那些代码。

 protected void gvRoleInfos_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow) 
        {
            LinkButton _singleClickButton = (LinkButton)e.Row.Cells[0].Controls[0];
            string _jsSingle = ClientScript.GetPostBackClientHyperlink(_singleClickButton, "");
            e.Row.Attributes["onclick"] = _jsSingle;



        }
    }






 protected void gvRoleInfos_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        GridView _gridview = sender as GridView;
        int _selectIndex = int.Parse(e.CommandArgument.ToString());
        string _commandName = e.CommandName;
        if (_commandName == "SingleClick") 
        {
            _gridview.SelectedIndex = _selectIndex;
        }

    }

然后在本页面重写Render方法

  protected override void Render(HtmlTextWriter writer)
    {
        foreach (GridViewRow row in gvRoleInfos.Rows) 
        {
            if (row.RowType == DataControlRowType.DataRow) 
            {
                Page.ClientScript.RegisterForEventValidation(row.UniqueID + "$ct100");
                Page.ClientScript.RegisterForEventValidation(row.UniqueID + "$ct101");
                Page.ClientScript.RegisterForEventValidation(row.UniqueID + "$ct102");
            }
        }
        base.Render(writer);
    }

 

原稿地址:http://www.cnblogs.com/webabcd/archive/2007/04/22/723113.html

英文地址:http://www.codeproject.com/KB/webforms/EditGridviewCells.aspx

 

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注