MonoTouch Dialog的UITableView。如何处理水龙头?

时间:2011-10-17 21:58:57

标签: c# uitableview xamarin.ios monotouch.dialog

MonotouchDialog可以很容易地创建UITableView对话框,但有时会出现类似弹出窗口的问题:

MonoTouch Dialog. Buttons with the 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委托,并且不接受任何参数,现在我不知道如何确定哪个元素被精确定位。

如何获得?

2 个答案:

答案 0 :(得分:3)

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

e.g。

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

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

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

答案 1 :(得分:2)

“......任何其他名字的花?”

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

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

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

    public MyNavController()
    {
        UserClickedAction = HandleUserClicked;
    }

    public void HandleUserClicked(User user)
    {
        ...
    }
}