我正在开发一个Roku应用程序,我们想要用户的出生日期。尽量不要在解析结束时过于复杂(因此不希望只有一个文本框,用户可以输入他们想要的任何内容)。我考虑使用roPinEntryDialog
,但不幸的是,我认为这仅用于输入付款信息。我看到roDateTime
是一个东西,但似乎只获得当前日期,并且没有任何类型的输入。
任何想法或帮助?
谢谢!
答案 0 :(得分:1)
您可以做什么取决于您是在编写应用程序SDK1(现在已弃用的较旧但简单的组件)还是RSG(Roku Scene Graph - 更新,更复杂的实现方式)样式。
如果使用RSG,我认为LabelList是实现类似于iOS UIDatePicker的良好开端。例如。使用远程Up-Down用户选择月份,然后按向右移动到日期列,然后按向右移动到年份列表。
答案 1 :(得分:1)
我最终使用的解决方案是使用常规文本键盘,并使用正则表达式验证输入:
getText: function(ageValidate as Boolean, defaultText as String, displayText as String) as String
screen = CreateObject("roKeyboardScreen")
port = CreateObject("roMessagePort")
screen.SetMessagePort(port)
screen.SetDisplayText(displayText)
screen.SetText(defaultText)
screen.SetMaxLength(100)
screen.AddButton(1, "done")
screen.AddButton(2, "back")
screen.Show()
while true
msg = wait(0, screen.GetMessagePort())
if type(msg) = "roKeyboardScreenEvent"
if msg.isScreenClosed()
return ""
else if msg.isButtonPressed() then
if ageValidate = true AND m.isValidDate(text) = false then
"Invalid Input", "Input your birthdate in the format MMDDYYYY", "okay")
else if text = invalid OR text = ""
showUserDialog("Error"), "no input", "okay")
else
screen.Close()
return text
end if
else if msg.GetIndex() = 2
screen.Close()
return ""
end if
end if
end if
end while
end function
isValidDate: function(date as String) as Boolean
return CreateObject("roRegex", "(0[1-9]|1[012])[-.]?(0[1-9]|[12][0-9]|3[01])[-.]?(19|20)[0-9]{2}", "i").IsMatch(date)
end function