当我从 UITableViewSource 单击 RowSelected 时如何打开 UIViewController

Posted

技术标签:

【中文标题】当我从 UITableViewSource 单击 RowSelected 时如何打开 UIViewController【英文标题】:how to open UIViewController when i click RowSelected from UITableViewSource 【发布时间】:2017-08-27 06:50:32 【问题描述】:

当我从 UITableViewSource 单击 RowSelected 时,我想打开视图控制器

我在打开 UIViewController 时使用此代码

任何帮助将不胜感激。

谢谢

MainStudUn controller =this.Storyboard.InstantiateViewController("MainStudUn") as MainStudUn; 
this.NavigationController.PushViewController(controller, true); 

但我在使用 UITableViewSource 中的此代码时遇到问题

class EmployeesTVS : UITableViewSource

    List<Employee> employees;

    public EmployeesTVS(List<Employee> employees)
    
        this.employees = employees;
    

    public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
    
        var cell = (EmployeeCell) tableView.DequeueReusableCell("Cell_id", indexPath);
        var employee = employees[indexPath.Row];
        cell.updatecell(employee);
        return cell;
    

    public override nint RowsInSection(UITableView tableview, nint section)
    
        return employees.Count;
    

    public override void RowSelected(UITableView tableView, NSIndexPath indexPath)
    

        var SelectName = employees[indexPath.Row];

        Globals.AskX = SelectName.Fullname;
        Globals.AnswerX = SelectName.Department;

        //OpnWerd();
        //MainStudUn controller = this.Storyboard.InstantiateViewController("MainStudUn") as MainStudUn;
        //this.NavigationController.PushViewController(controller, true);
    

【问题讨论】:

【参考方案1】:

将 ViewController 本身设置为 dataSource 的初始化构造函数中的参数。

在视图控制器中

this.TableView.Source = new EmployeesTVS(tableItems, this);

在数据源中

AskStud owner; //this is your VC class not ViewController,it's just a sample.
public EmployeesTVS(List<Employee> employees, AskStud  owner)

    this.employees = employees;
    this.owner = owner;

用法:

MainStudUn controller =this.owner.Storyboard.InstantiateViewController("MainStudUn") as MainStudUn; 
//OR 
//UIStoryboard Storyboard = UIStoryboard.FromName("StoryBoardName", null);
//MainStudUn controller = Storyboard.InstantiateViewController("MainStudUn") as MainStudUn;

this.owner.NavigationController.PushViewController(controller, true);

【讨论】:

错误 CS1061 'EmployeesTVS' 不包含对 'Storyboard' 的定义,并且找不到接受类型为 'EmployeesTVS' 的第一个参数的扩展方法 'Storyboard'(您是否缺少 using 指令或程序集参考?) listVStud.Source = newEmployeesTVS(employees, this); listVStud.RowHeight = UITableView.AutomaticDimension; listVStud.EstimatedRowHeight = 100F; listVStud.ReloadData(); 错误 CS1503 参数 2:无法从“Trainingios.AskStud”转换为“TrainingIOS.ViewController”TrainingIOS D:\TrainingIOS\TrainingIOS\AskStud.cs 67 @Eng.Ahmed e......ViewController 是第一个 VC 类......查看我的更新答案...... 抱歉问题在这里:listVStud.Source = new EmployeesTVS(employees, this);无法从“TrainingIOS.AskStud”转换为“TrainingIOS.ViewController”

以上是关于当我从 UITableViewSource 单击 RowSelected 时如何打开 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章

当我从 <a> 标签单击歌曲时,如何让 mp3 播放器播放歌曲?

当我从一个选项卡单击到另一个选项卡时,如何使TabLayout中的选项卡不可滚动

用 uitableview 加载 UIView

为啥只有当我从 iframe 调用 postMessage() 方法时我的 Angular 属性才会更新

当我从android访问Java servlet时mysql数据库没有更新

在本机反应中处理设备后退按钮