循环浏览子视图或视图
我在做什么错?意见在IB中设置。有3个answersView子视图。每个都是UITextViews。但是我得到一个答案,我无法在UIView上设置文本。提前致谢。循环浏览子视图或视图
int i;
for (i=0; i<[[[self answersView]subviews]count]; i++)
{
UITextView *currentText = (UITextView *)[[self answersView] viewWithTag:i];
NSString *answer = [[self answersArray] objectAtIndex:i];
[currentText setText:answer];
}
的错误是:终止应用程序由于未捕获的异常 'NSInvalidArgumentException',原因是: ' - [UIView的的setText:]:无法识别的选择发送到实例0x5f56330'
好吧,我已经更新了代码
int i;
for (i=0; i<[[[self answersView]subviews]count]; i++)
{
UITextView *currentText = (UITextView *)[[self answersView] viewWithTag:i+1];
if ([currentText isKindOfClass:[UITextView class]]) {
NSString *answer = [[self answersArray] objectAtIndex:i];
[currentText setText:answer];
NSLog(@" tag %d",i + 1);
}
}
感谢您的帮助。
你想在你添加-1
for循环,这样你就不会出界。此外,您需要检查子视图是否为文本字段对象,否则您将在某种其他类型的视图上设置文本。
代码:
for (int i=0; i<[[[self answersView]subviews]count]-1; i++) {
if ([[[self answersView] viewWithTag:i] isKindOfClass:@"UITextView") {
UITextView *currentText = (UITextView *)[[self answersView] viewWithTag:i];
NSString *answer = [[self answersArray] objectAtIndex:i];
[currentText setText:answer];
}
}
设置标记值大于0.从1循环到数组数。
超级视图的默认标签值为0.因为只有你得到这样的错误。
谢谢。这是问题所在。然而,使用下面的代码我不会得到标签3,如果我做了一些改变,它超出了界限,尽管我知道在视图中有3个UITextViews,没有别的。 int i; \t为(I = 1;我 intomo 2011-01-24 17:05:00
for(i = 1; i [[[self answersView] subviews] count] +1; i ++) – KingofBliss 2011-01-25 02:33:07
嘿那里, 我认为你的代码很容易出错,因为它依赖于视图总是会有一个标记号码集。你可以做两件事情在我看来:
1)检查调用的setText是currentText是一个有效的UITextView做这样的事情之前:
if ([currentText isKindOfClass:[UITextView class]])
{
...
[currentText setText:answer];
...
}
2)我真的认为这是更好,环通这样子视图:
for (UITextView* currentText in [[self answersView]subViews])
{
...
[currentText setText:answer];
...
}
我可以知道你的接受的答案是如何解决这个问题呢?您已经使用我的解决方案并接受了其他答案? – KingofBliss 2011-01-25 02:32:47