2

MonotouchDialog 使得创建 UITableView 对话框变得非常容易,但有时会弹出这样的问题:

MonoTouch 对话框。带有 Elements API 的按钮

现在,我有一个类似的问题,但完全不同:

List<User> users = GetUsers();

var root = 
   new RootElement ("LoginScreen"){
     new Section ("Enter your credentials") {
       foreach(var user in users)
         new StyledStringElement (user.Name, ()=> {
            // tap on an element (but which one exactly?)
         }
     ),
   }

navigation.PushViewController (new MainController (root), true);

现在,StyledStringElement的构造函数的第二个参数具有NSAction委托类型,并且不带任何参数,现在我不知道如何准确确定哪个元素被点击了。

如何得到它?

4

2 回答 2

3

如果是,Tapped那么它已被选中。因此,您应该能够继承StyleStringElement覆盖Selected方法以实现相同的目标。

例如

class UserElement : StyleStingElement {
    public UserElement (User user) { ... }

    public override Selected (...)
    {
        // do your processing on 'user'
        base.Selected (dvc, tableView, indexPath);
    }
}

对于Touch.Unit ,我为我拥有的每个项目创建了一个新的*Element , TestSuiteElement、TestCaseElement、TestResultElement... 以便能够自定义它们中的每一个并(稍微)调整它们的行为,但我没有使用它Selected来替换Tapped. 您可能想要检查,但它不适合您的代码模式来创建元素。

于 2011-10-18T02:31:49.833 回答
2

“……一朵别的名字的花?”

如果您仔细观察,NSAction 只是代表。我更喜欢将 Action / Func 传递给那些引用包含在...容器控制器中的参数。

因此,让您拥有一个推送 DialogViewController 的 UINavigationController。选择您的元素后,您将提供您传递给元素的唯一用户并从那里开始:-)

public class MyNavController : UINavigationController
{
    Action<User> UserClickedAction;

    public MyNavController()
    {
        UserClickedAction = HandleUserClicked;
    }

    public void HandleUserClicked(User user)
    {
        ...
    }
}
于 2011-10-17T23:47:01.813 回答