На левой и самой правой кнопках UIToolbar трудно нажимать - PullRequest
2 голосов
/ 13 февраля 2010

Я потратил пару дней на решение этой проблемы, поэтому решил поделиться с вами решением, чтобы вы могли посвятить больше времени своим семьям:

Предположим, у вас есть UIToolbar, на котором нужно разместить большое количество кнопок (скажем, 5). Когда пользователь пытается нажать на крайнюю левую или крайнюю правую кнопку, он часто нажимает на соседнюю кнопку. Изначально код выглядел так:

self.bookmarkButton = [[[UIBarButtonItem alloc] ...;
 self.sendButton = [[[UIBarButtonItem alloc] ...;    
 self.backstageButton = [[[UIBarButtonItem alloc] ...;
 self.voteButton = [[[UIBarButtonItem alloc] ...;
 self.vipButton = [[[UIBarButtonItem alloc] ...;

 UIBarButtonItem *sep0 = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease];
 UIBarButtonItem *sep1 = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease];
 UIBarButtonItem *sep2 = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease];
 UIBarButtonItem *sep3 = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease];


 [self setItems:[[[NSArray alloc] initWithObjects: self.bookmarkButton, sep0, self.sendButton, sep1, self.voteButton , sep2, self.backstageButton, sep3,  self.vipButton, nil]  autorelease]];

Я попробовал несколько методов, таких как установка явной ширины кнопок и удаление разделителей, увеличение ширины самой левой и самой правой кнопок, но ни одна из них не работала по разным причинам.

Самый надежный способ решить эту проблему - ввести еще два разделителя, один слева от самой левой кнопки и один справа от самой правой кнопки. Примерно так:

self.bookmarkButton = [[[UIBarButtonItem alloc] ...;
 self.sendButton = [[[UIBarButtonItem alloc] ...;   
 self.backstageButton = [[[UIBarButtonItem alloc] ...;
 self.voteButton = [[[UIBarButtonItem alloc] ...;
 self.vipButton = [[[UIBarButtonItem alloc] ...;

 UIBarButtonItem *sep0 = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease];
 UIBarButtonItem *sep1 = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease];
 UIBarButtonItem *sep2 = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease];
 UIBarButtonItem *sep3 = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease];

UIBarButtonItem *sepLeft = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease];

UIBarButtonItem *sepRight = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease];

 [self setItems:[[[NSArray alloc] initWithObjects: sepLeft, self.bookmarkButton, sep0, self.sendButton, sep1, self.voteButton , sep2, self.backstageButton, sep3,  self.vipButton, sepRight, nil]  autorelease]];

Это решило проблему полностью. Конечно, все кнопки слегка смещены к центру, как вы можете видеть здесь:

http://pics.livejournal.com/andre_po/pic/00004t7f

но это разумная цена.

...