MonoTouch如何为具有静态单元格的UITableViewController实现RowSelected

时间:2012-04-23 07:51:21

标签: uitableview static xamarin.ios cells

我正在将原生Objective-C应用移植到Monotouch解决方案。

我的故事板中有一个tableview,带有一些静态表格单元格。

使用以下目标-c代码a从表中接收选择

- (void) tableView:(UITableView *) aTableView didSelectRowAtIndexPath:(NSIndexPath *) indexPath
{        // remove the row highlight
    [aTableView deselectRowAtIndexPath:indexPath animated:YES];

    switch(indexPath.row) {
        case 0: [self callWebsite]; break;
        case 1: [self sendEmail]; break;
        case 2: [self makePhoneCall]; break;
    }

    return;
}

现在我想在MonoTouch中做同样的事情,但是无法找到我在网上找到的所有示例以及使用DataSource和UITableViewDelegate的所有示例。

但是当使用这种方法时,我的“静态”细胞被移除,替换。

这就是我正在尝试的

public partial class ContactViewController : UITableViewController
{
    public ContactViewController (IntPtr handle) : base (handle)
    {
        this.TableView.Delegate = new CustomTableViewDelegate();
    }
}

public class CustomTableViewDelegate : UITableViewDelegate
{
    public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
    {
        // Remove the row highlight
        RowDeselected(tableView, indexPath);

        /*
             // Is this section our "button" section?
            switch(indexPath.row) {
                case 0: [self callWebsite]; break;
                case 1: [self sendEmail]; break;
                case 2: [self makePhoneCall]; break;
            }
        */

        Console.WriteLine("Do something meaningfull.");
    }
}

有人有什么建议吗?

1 个答案:

答案 0 :(得分:7)

我认为您应该尝试使用WeakDelegate来完成这项工作。

在您的控制器中连接方法如下:

[Export("tableView:didSelectRowAtIndexPath:")]
public void RowSelected (UITableView tableView, NSIndexPath indexPath)
{
     //Your code here
}

然后设置TableView.WeakDelegate = this;

玩它,我可能没有完全正确的参数等等。