在Xamarin IOS中更改UITableview中删除按钮的字体系列和字体

时间:2018-03-19 22:04:38

标签: xamarin.ios

我使用下面的代码在Xamarin IOS的​​UITableview中显示自定义文本来代替刷卡中的删除。

public override string TitleForDeleteConfirmation(UITableView tableView, NSIndexPath indexPath)
        {   // Optional - default text is 'Delete'
            return "Move Out";
        }

我想单独自定义此文本的字体系列和字体,我不希望它影响其他地方使用的字体和字体系列。

关于此的任何指示。

2 个答案:

答案 0 :(得分:0)

我们应该弄清楚这个删除按钮的层次关系。它在不同版本上有一些差异。

在iOS 11上:它是UITableView的子视图,因此我们可以使用以下代码获取它。但在我的测试中,XCode 8和9之间也存在一些差异。

if (UIDevice.CurrentDevice.CheckSystemVersion(11, 0))
{
    //foreach (UIView subView in MyTableView.Subviews)
    //{
    //    if (subView.Class.Name.ToString() == "UITableViewWrapperView")
    //    {
    //        foreach (UIView subsubView in subView.Subviews)
    //        {
    //            if (subsubView.Class.Name.ToString() == "UISwipeActionPullView")
    //            {
    //                UIButton deleteBtn = subView.Subviews[0] as UIButton;

    //                //configure the button
    //            }
    //        }
    //    }
    //}
    //For XCode 9.0+
    foreach (UIView subView in MyTableView.Subviews)
    {                  
        if (subView.Class.Name.ToString() == "UISwipeActionPullView")
        {
            UIButton deleteBtn = subView.Subviews[0] as UIButton;

            //configure the button
        }                      
    }
}

在iOS 8-10上:这是UITableViewCell的子视图,请尝试枚举它:

else
{
    UITableViewCell tableViewCell = MyTableView.CellAt(editingIndexPath);
    foreach (UIView subView in tableViewCell.Subviews)
    {
        if (subView.Class.Name.ToString() == "UITableViewCellDeleteConfirmationView")
        {
            UIButton deleteBtn = subView.Subviews[0] as UIButton;

            //configure the button
        }
    }
}

我们需要在用户滑动时显示每个单元格以显示删除按钮。我们可以在活动中得到它:

public class MyTableViewSource : UITableViewSource
{
    ViewController superViewController;

    public MyTableViewSource(ViewController viewController)
    {
        superViewController = viewController;
    }

    public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
    {
        ...
    }

    public override nint RowsInSection(UITableView tableview, nint section)
    {
        ...
    }

    public override string TitleForDeleteConfirmation(UITableView tableView, NSIndexPath indexPath)
    {
        return "Move Out";
    }

    public override void WillBeginEditing(UITableView tableView, NSIndexPath indexPath)
    {
        superViewController.editingIndexPath = indexPath;
        //use this method to fire "ViewDidLayoutSubviews()"
        superViewController.View.SetNeedsLayout();
    }

    public override void DidEndEditing(UITableView tableView, NSIndexPath indexPath)
    {
        superViewController.editingIndexPath = null;
    }

    public override void CommitEditingStyle(UITableView tableView, UITableViewCellEditingStyle editingStyle, NSIndexPath indexPath)
    {

    }    
}

设置完成后,ViewDidLayoutSubviews()将在显示删除按钮之前触发。因此,我们需要在ViewDidLayoutSubviews()中调用我们在上面创建的配置方法:

public NSIndexPath editingIndexPath;
public override void ViewDidLayoutSubviews()
{
    base.ViewDidLayoutSubviews();

    if (editingIndexPath != null)
    {
        //This method is the code what I post above, implement on different iOS versions.
        configSwipeActions();
    }
}

答案 1 :(得分:0)

步骤:

1点击故事栏中的单元格 2在您的酒店栏上设置班级名称 3创建类里面找到你的控件(只需键入你的控件名称出现?); 4设置your_controll.Font =(UIFont.FromName(" Helvetica",10);)