我正在尝试在UITextView中创建一些东西,每次文本遇到这种符号“@”。该符号后面的所有文本都将发送给其他控制器。
这是我的代码
- (BOOL)textView:(UITextView *)aTextView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
// "Length of existing text" - "Length of replaced text" + "Length of replacement text"
NSInteger newTextLength = [self.addingText.text length] - range.length + [text length];
if([text isEqualToString:@"@"] || secondString){
secondString = true;
NSString * stringToRange = [self.addingText.text substringWithRange:NSMakeRange(0,range.location)];
// Appending the currently typed charactor
stringToRange = [stringToRange stringByAppendingString:text];
// Processing the last typed word
NSArray *wordArray = [stringToRange componentsSeparatedByString:@"@"];
self.getSecondString = [wordArray lastObject];
// wordTyped will give you the last typed object
NSLog(@"\nWordTyped : %@",self.getSecondString);
}
if (newTextLength > 50) {
// don't allow change
[aTextView resignFirstResponder];
return NO;
}
self.countChar.text = [NSString stringWithFormat:@"%li", (long)newTextLength];
return YES;
}
我从here获得了该代码。当我使用NSLog时,它是完美的工作,但我点击按钮使用segue将其发送到其他控制器。它总是显示Null值。希望你的帮助在这里。提前致谢
这是我的按钮代码
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
CameraViewController * cameraViewController = (CameraViewController *)[segue destinationViewController];
if([segue.identifier isEqualToString:@"createText"]){
NSLog(@"prepareForSegue: %@ == %@", self.addingText.text,self.getSecondString);
cameraViewController.inputCreateText = [NSString stringWithFormat:@"%@", self.addingText.text];
cameraViewController.secondInputCreateText =[NSString stringWithFormat:@"%@", self.getSecondString];
}
}
答案 0 :(得分:0)
我认为您的问题是您正在修改textView:shouldChangeTextInRange:
内的字符串,该字符串会针对每个输入的字符进行调用。如果您的目的是在点击按钮后在@
之后发送字符串,则在按钮处理程序或prepareForSegue:sender:
内进行计算。如果由于某种原因你想坚持自己的实现,那么我建议你把你的目标字符串放在类级别创建的NSMutableArray
属性中,这样你就不会丢失数据。然后你可以将该数组中的所有字符串组合起来,如[arrayOfStrings componentsJoinedByString:@" "]
。