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
委托,并且不接受任何参数,现在我不知道如何确定哪个元素被精确定位。
如何获得?
答案 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)
{
...
}
}