// Вы можете использовать это ...
Шаг 1. Первый шаг - убедиться, что вы заявили о поддержке протокола UITextViewDelegate
. Это делается в вашем заголовочном файле, в качестве примера можно привести заголовок
EditorController.h:
@interface EditorController : UIViewController {
UITextView *messageTextView;
}
@property (nonatomic, retain) UITextView *messageTextView;
@end
Шаг 2. Далее вам необходимо зарегистрировать контроллер в качестве делегата UITextView. Продолжая из приведенного выше примера, вот как я инициализировал UITextView
с EditorController
в качестве делегата…
- (id) init {
if (self = [super init]) {
// define the area and location for the UITextView
CGRect tfFrame = CGRectMake(10, 10, 300, 100);
messageTextView = [[UITextView alloc] initWithFrame:tfFrame];
// make sure that it is editable
messageTextView.editable = YES;
// add the controller as the delegate
messageTextView.delegate = self;
}
Шаг 3. И теперь последний кусок головоломки - принять меры в ответ на сообщение shouldCahngeTextInRange
следующим образом:
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range
replacementText:(NSString *)text
{
// Any new character added is passed in as the "text" parameter
if ([text isEqualToString:@"\n"]) {
// Be sure to test for equality using the "isEqualToString" message
[textView resignFirstResponder];
// Return FALSE so that the final '\n' character doesn't get added
return FALSE;
}
// For any other character return TRUE so that the text gets added to the view
return TRUE;
}
Попытка
ISNULL(FirstName, '<BlankValue>') -- In SQL Server
IFNULL(Firstname, '<BlankValue>') -- In MySQL
Итак,
CONCAT(ISNULL(FirstName,''),ISNULL(LastName,''),ISNULL(Email,'')) -- In SQL Server
CONCAT(IFNULL(FirstName,''),IFNULL(LastName,''),IFNULL(Email,'')) -- In MySQL
вернет то же самое без проблемы с нулем (и пустой строки, где должны быть нули).
SELECT ISNULL(FirstName,'')+ISNULL(LastName,'')+ISNULL(Email,'') as Vitals FROM MEMBERS
рекомендуется, но если вы действительно подключились к CONCAT, оберните его в {fn}, и вы можете использовать функцию ODBC, например:
SELECT {fn CONCAT(ISNULL(FirstName,''), ISNULL(LastName,''), ISNULL(Email,''))} as Vitals FROM MEMBERS
Если вам нужен первый <пробел> последний, но просто last, когда first имеет значение null, вы можете сделать следующее:
ISNULL(FirstName+' ','') + ISNULL(LastName,'')
Я добавил пробел к имени, которое может иметь значение null - это будет означать, что пробел будет существовать только в том случае, если FirstName имеет значение.
Чтобы соединить их все вместе с пробелом. между каждым:
RTRIM(ISNULL(Firstname+' ','') + ISNULL(LastName+' ','') + ISNULL(Email,''))
Вы всегда можете использовать параметр CONCAT_NULL_YIELDS_NULL
..
просто запустите SET CONCAT_NULL_YIELDS_NULL OFF
, а затем все нулевые
конкатенации приведет к тексту, а не к нулю ..
Ответ Стефана правильный. Чтобы исследовать немного глубже, вам нужно знать, что NULL - это не то же самое, что Nothing. Null представляет собой отсутствие значения или, другими словами, не определено. Ничто не представляет собой пустую строку, которая на самом деле является значением.
Undefined + something = undefined
Хороший лакомый кусок базы данных, за который нужно держаться!
SQL Server не имеет функции CONCAT
.
(Обновление: начиная с MS SQL Server 2012 была введена функция CONCAT )
В поведении SQL Server по умолчанию значения NULL передаются через выражение.
В SQL Server можно было бы написать:
SELECT FirstName + LastName + Email as Vitals FROM MEMBERS
] Если вам нужно обработать NULL
s:
SELECT ISNULL(FirstName, '') + ISNULL(LastName, '') + ISNULL(Email, '') as Vitals FROM MEMBERS