« Intermezzo 0.9.1 | ホーム | RT58iをもう一度使ってみるよ »

2009年4月 9日

Safari(or WebKit?)からNSTextFieldへのURL貼付け

こんどはNSTextField/NSTextViewについての話。SafariからNSTextFieldにリンクやアドレスバーをドラッグ&ドロップなどして貼付けようってときに、Interface Builder上で"Rich Text"がオン(実際のプロパティではどれになるんだろ。allowsEditingTextAttributesとかimportGraphicsとか?)になっていると、URLではなくそのページのタイトルなどが出てきてしまう現象に対して。

この場合、編集中の状態にあるNSTextFieldに対してのオペレーションになるので、Field EditorであるNSTextViewに実際はメッセージが行くことになる。ペースト時にNSTextViewが受け取るのは[NSTextView readSelectionFromPasteboard:type:]メソッドなので、ここでtypeを調べ、SafariからのURLペーストであった場合にはURLを拾うよう明示するのである。

- (BOOL)readSelectionFromPasteboard:(NSPasteboard*)pboard type:(NSString*)type
{
	NSLog(@"pasteboard = %@ / type = %@", pboard, type);
	NSRange r = [self rangeForUserTextChange];
	
	if ([type isEqual:@"WebURLsWithTitlesPboardType"]) {
		NSArray *urls = [[pboard propertyListForType:type] objectAtIndex:0];
		
		[self replaceCharactersInRange:r withString:[urls componentsJoinedByString:@" "]];
		return YES;
	}
	return [super readSelectionFromPasteboard:pboard type:type];
}

このメソッドをカテゴリ使って直接NSTextViewにくっつけるか、もしくはこのメソッドを持つNSTextViewの子クラスを定義し、そのインスタンスを[NSWindow windowWillReturnFieldEditor:toObject:]で渡してやるとかすればよいですな。

トラックバック(0)

トラックバックURL: http://foursics.jp/cgi-bin/mt/mt-tb.cgi/253

コメントする