【问题标题】:Problem with UITextViewUITextView 的问题
【发布时间】:2010-06-15 08:40:55
【问题描述】:

如果字符串来自 UITextview 而不是 UITextfield,我在尝试将字符串从一个视图控制器传递到另一个视图控制器时遇到一个奇怪的问题。 UITextview.text 和 UITextfield.text 都是 NSString 类型。

以下代码根据 fieldType 采用 Textfield.text 或 Textview.text 并将其放入名为 aString 的字符串中。

NSString *aString = [[NSString alloc] init];
if (fieldType == 3) {
  aString = textView.text;
} else {
  aString = textField.text;
}

当我在任一情况下检查 aString 时,我可以看到它已成功地将文本分配给 aString。

然后我使用此代码将字符串传递给另一个视图控制器。

[delegate updateSite:aString :editedFieldKey :fieldType];
[self.navigationController popViewControllerAnimated:YES];

如果 aString 来自 textfield.text,这工作正常,但是如果 aString 来自 textview.text,则除了弹出视图控制器之外什么也没有发生

这是接受 aString 并对其进行处理的代码,但它甚至不执行第一行代码 "NSLog(@"Returned object: %@, field type:%@", aString,editedFieldKey) ;"如果 aString 来自 textview.text 任何帮助将不胜感激。

-(void)updateSite:(NSString *)aString :(NSString *)editedFieldKey :(int)fieldType  {
 NSLog(@"Returned object: %@, field type:%@", aString,editedFieldKey);

 switch (fieldType) {
  case 0: //string
   [aDiveSite setValue:aString forKey:editedFieldKey] ;
   NSLog(@"String set %@",[aDiveSite valueForKey:editedFieldKey] );
   break;
  case 1: //int
   [aDiveSite setValue:[NSNumber numberWithInt:aString.intValue] forKey:editedFieldKey];
   NSLog(@"Integer set");
   break;
  case 2: //float
   NSLog(@"Saving floating value");
   [aDiveSite setValue:[NSNumber numberWithFloat:aString.floatValue] forKey:editedFieldKey];
   NSLog(@"Float set");
   break;
  case 3: //Text view
   [aDiveSite setValue:aString forKey:editedFieldKey];
   NSLog(@"Textview text saved");  
  default:        
   break;
 }
 [self.tableView reloadData]; 
}

【问题讨论】:

  • 您正在泄漏字符串。您应该替换“NSString *aString = [[NSString alloc] init];”用“NSString *aString;”

标签: iphone uitextview


【解决方案1】:

嗯,听起来很奇怪,但我认为你的语法是错误的:

[delegate updateSite:aString :editedFieldKey :fieldType];

应该是

[delegate updateSite:aString editedFieldKey:fieldType];

以及方法名:

-(void)updateSite:(NSString *)aString :(NSString *)editedFieldKey :(int)fieldType;

应该是:

-(void)updateSite:(NSString *)aString (NSString *)editedFieldKey :(int)fieldType;

你可以试试吗?

【讨论】:

  • 语法 [delegate updateSite:aString :editedFieldKey :fieldType] 实际上是正确的 - 他没有命名参数。 editedFieldKey 是实际参数。不过,非常令人困惑。另外,方法名是正确的。
【解决方案2】:

这是我为编辑文本字段而将其更改为的内容

[self.delegate editingViewController:self didTypeText:aString forKey:editedFieldKey forFieldType:fieldType];

对于 textview,我创建了一个单独的控制器来处理它(并且它有效)

[self.delegate editTextViewController:self didEditText:textView.text forKey:editedFieldKey];

【讨论】:

    猜你喜欢
    • 2010-12-24
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多