uipagecontrol 指示器(点)问题
Posted
技术标签:
【中文标题】uipagecontrol 指示器(点)问题【英文标题】:uipagecontrol indicator(dot)issue 【发布时间】:2011-01-10 08:54:47 【问题描述】:大家好...
我想更改 uipagecontroller 指示器(点)颜色...为此,我正在执行以下步骤。
使用 2 个方法创建名为 PageControl 的新类
1.- (void) setCurrentPage:(NSInteger)page
2.- (void) setNumberOfPages:(NSInteger)pages
- (void) setCurrentPage:(NSInteger)page
NSLog(@"setCurrentPage");
[super setCurrentPage:page];
NSString* imgActive = [[NSBundle mainBundle] pathForResource:@"activeimage" ofType:@"png"];
NSString* imgInactive = [[NSBundle mainBundle] pathForResource:@"inactive" ofType:@"png"];
for (NSUInteger subviewIndex = 0; subviewIndex < [self.subviews count]; subviewIndex++)
UIImageView* subview= [self.subviews objectAtIndex:subviewIndex];
if (subviewIndex == page)
[subview setImage:[UIImage imageWithContentsOfFile:imgActive]];
else
[subview setImage:[UIImage imageWithContentsOfFile:imgInactive]];
subview.frame = CGRectMake(subview.frame.origin.x, subview.frame.origin.y, 10,10);
- (void) setNumberOfPages:(NSInteger)pages
NSLog(@"setNumberOfPages");
[super setNumberOfPages:pages];
NSString* img = [[NSBundle mainBundle] pathForResource:@"inactive" ofType:@"png"];
for (NSUInteger subviewIndex = 0; subviewIndex < [self.subviews count]; subviewIndex++)
UIImageView* subview= [self.subviews objectAtIndex:subviewIndex];
[subview setImage:[UIImage imageWithContentsOfFile:img]];
subview.frame = CGRectMake(subview.frame.origin.x, subview.frame.origin.y, 10,10);
我已经有了一个带有 pagecontrol 和 scrollview 的视图...我正在做的是从 nib 中选择 uipagecontroller 并选择身份检查器并选择类名 PageControl(具有 2 个方法的新创建类)它适用于滑动图像时更改颜色,但它不适用于单击页面控件以移至下一页...
我不知道我应该包含什么或我在做什么错误...请帮我解决这个问题...
谢谢...
【问题讨论】:
【参考方案1】:如果您想在单击点时启用页面滚动,那么您首先需要将您的 xib 文件中的“值更改”属性与您在代码中设置的操作相关联。
我已经在我的一个项目中实现了相同的功能,所以它肯定会起作用。
- (IBAction)changePage:(id)sender
int page = pageControl.currentPage;
CGFloat pageWidth = scrollView.frame.size.width;
pageWidth = scrollView.frame.size.width;
pageControl.currentPage = page;
CGRect frame = scrollView.frame;
frame.origin.x = frame.size.width * page;
frame.origin.y = 0;
[scrollView scrollRectToVisible:frame animated:YES];
// Set the boolean used when scrolls originate from the UIPageControl. See scrollViewDidScroll: above.
干杯
【讨论】:
Hai Aditya...我已经在我的 preview.m class.preview.m 类 xib 中编写了这段代码,我正在将 changePage 操作方法与页面控件连接为“value Changed” ...新创建的用于更改页面控件指示器的类称为PageControl。在xib中打开页面控件并选择类名作为PageControl,即(新创建的类名)。它在滚动页面时更改点颜色。此时单击页面控件移动到下一页它显示一个普通指示器(无颜色)...非常感谢您的快速回复... 我认为这个链接会帮助你onidev.com/2009/12/02/customisable-uipagecontrol 是的,这个链接可以帮助我更多...谢谢 Aditya【参考方案2】:您的上述代码在 ios 7 中崩溃。我找到了解决此问题的方法。我知道这不是办法,但在 iOS 8 上市之前它肯定可以工作。
崩溃原因:
在 iOS 7 中 [self.subViews objectAtIndex: i]
返回 UIView
而不是 UIImageView
并且 setImage 不是 UIView 的属性并且应用程序崩溃。我使用以下代码解决了我的问题。
检查子视图是UIView
(适用于iOS7)还是UIImageView
(适用于iOS6或更早版本)。如果它是 UIView,我将在该视图上添加 UIImageView
作为子视图,瞧它的工作,而不是崩溃..!!
-(void) updateDots
for (int i = 0; i < [self.subviews count]; i++)
UIImageView * dot = [self imageViewForSubview: [self.subviews objectAtIndex: i]];
if (i == self.currentPage) dot.image = activeImage;
else dot.image = inactiveImage;
- (UIImageView *) imageViewForSubview: (UIView *) view
UIImageView * dot = nil;
if ([view isKindOfClass: [UIView class]])
for (UIView* subview in view.subviews)
if ([subview isKindOfClass:[UIImageView class]])
dot = (UIImageView *)subview;
break;
if (dot == nil)
dot = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, view.frame.size.width, view.frame.size.height)];
[view addSubview:dot];
else
dot = (UIImageView *) view;
return dot;
希望这也能解决 iOS7 的问题。如果 Anypone 找到了最佳解决方案,请发表评论。 :)
愉快的编码
【讨论】:
以上是关于uipagecontrol 指示器(点)问题的主要内容,如果未能解决你的问题,请参考以下文章
使用 UIPageControl 减小点大小或填充以适应屏幕上的所有页面指示器