Ios 我应该如何在单击按钮时以编程方式更改链接活动中的内容?

Ios 我应该如何在单击按钮时以编程方式更改链接活动中的内容?,ios,objective-c,cocoa-touch,Ios,Objective C,Cocoa Touch,这个问题看似简单,但请听我说完。我犯了一个巨大的错误,我的项目在一个故事板中包含300多个活动,而我最近才发现Xcode在处理这些活动方面非常糟糕。所以我想做的是让我的不同内容现在显示在单独的活动中写入代码,这样我只需要在我的故事板中有最小数量的活动。这可能很难理解,我道歉 在我的脑海里,这就是它应该如何工作。我举个例子 在我的应用程序中,我有一个名为“地图”的部分,从主页上单击“地图”按钮,它会将您带到一个菜单,菜单上有带有地图名称的按钮。正如您所期望的那样,按钮上的地图名称将为您带来所述地图

这个问题看似简单,但请听我说完。我犯了一个巨大的错误,我的项目在一个故事板中包含300多个活动,而我最近才发现Xcode在处理这些活动方面非常糟糕。所以我想做的是让我的不同内容现在显示在单独的活动中写入代码,这样我只需要在我的故事板中有最小数量的活动。这可能很难理解,我道歉

在我的脑海里,这就是它应该如何工作。我举个例子

在我的应用程序中,我有一个名为“地图”的部分,从主页上单击“地图”按钮,它会将您带到一个菜单,菜单上有带有地图名称的按钮。正如您所期望的那样,按钮上的地图名称将为您带来所述地图的活动。问题在于,每个地图都位于一个单独的活动中,该活动也链接在故事板内部

我想做的是通过编程从我的故事板中的一个活动中调用每个单独的活动,有效地将20多个活动替换为1

下面是我的地图视图控制器的外观(它们实际上是带有滚动视图的.png图像)

地图路线1.h

#import "ViewController.h"

@interface MapRoute1 : ViewController <UIScrollViewDelegate>

@property (nonatomic, strong) IBOutlet UIScrollView *scrollView;
@property (nonatomic, strong) UIImageView *imageView;

- (void)centerScrollViewContents;
- (void)scrollViewDoubleTapped:(UITapGestureRecognizer*)recognizer;
- (void)scrollViewTwoFingerTapped:(UITapGestureRecognizer*)recognizer;

@end
我想做的是有一些我的所有图像的列表,当点击该地图(图像)的按钮时,它将用按钮应该链接的图像名称或地图替换这行代码。整个代码和所有内容都应该是我的故事板中的一个活动,链接到“地图”菜单中的每个按钮

目前,所有活动都通过情节提要中的一个简单的“控件单击-拖动”链接,并包含在提供反向导航的导航控制器中

我想用导航控制器保留后导航,但只需替换scrollview中的图像

提前谢谢


-德里克

你说的“活动”是什么意思?你是说按钮的动作方式吗?如果唯一需要更改的是图像名称,那么将所有图像名称放入一个数组中,并在单击按钮时给出与要访问的数组中的索引相对应的所有按钮标记。嘿,是的,对不起,我一定是把安卓与此混淆了。我所说的活动是指故事板中的视图控制器。我认为我在第一条评论中所说的应该适用于您。将所有图像名称放在一个数组中,并给出所有按钮标记,然后使用该标记(在所有按钮的单个iAction中)访问数组的一个元素。将该字符串传递给下一个控制器,然后对其进行推送(或在故事板中使用推送序列)。我一直在尝试实现您所述的方法。我确信它会起作用。唯一的一点是,我是阵列的noob,并将数据持久化到其他VCs。您是否介意发布一些示例代码,介绍按钮如何知道要发送什么文本,如何发送文本,以及如何将sting值接收到[UIImage imagename:@“imagename.png”];为了地图。
    #import "MapRoute1.h"

@interface MapRoute1 ()

@end

@implementation MapRoute1

@synthesize imageView = _imageView;
@synthesize scrollView = _scrollView;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)centerScrollViewContents {
    CGSize boundsSize = self.scrollView.bounds.size;
    CGRect contentsFrame = self.imageView.frame;

    if (contentsFrame.size.width < boundsSize.width) {
        contentsFrame.origin.x = (boundsSize.width - contentsFrame.size.width) / 2.0f;
    } else {
        contentsFrame.origin.x = 0.0f;
    }

    if (contentsFrame.size.height < boundsSize.height) {
        contentsFrame.origin.y = (boundsSize.height - contentsFrame.size.height) / 2.0f;
    } else {
        contentsFrame.origin.y = 0.0f;
    }

    self.imageView.frame = contentsFrame;
}

- (void)scrollViewDoubleTapped:(UITapGestureRecognizer*)recognizer {
    // 1
    CGPoint pointInView = [recognizer locationInView:self.imageView];

    // 2
    CGFloat newZoomScale = self.scrollView.zoomScale * 1.5f;
    newZoomScale = MIN(newZoomScale, self.scrollView.maximumZoomScale);

    // 3
    CGSize scrollViewSize = self.scrollView.bounds.size;

    CGFloat w = scrollViewSize.width / newZoomScale;
    CGFloat h = scrollViewSize.height / newZoomScale;
    CGFloat x = pointInView.x - (w / 2.0f);
    CGFloat y = pointInView.y - (h / 2.0f);

    CGRect rectToZoomTo = CGRectMake(x, y, w, h);

    // 4
    [self.scrollView zoomToRect:rectToZoomTo animated:YES];
}

- (void)scrollViewTwoFingerTapped:(UITapGestureRecognizer*)recognizer {
    // Zoom out slightly, capping at the minimum zoom scale specified by the scroll view
    CGFloat newZoomScale = self.scrollView.zoomScale / 1.5f;
    newZoomScale = MAX(newZoomScale, self.scrollView.minimumZoomScale);
    [self.scrollView setZoomScale:newZoomScale animated:YES];
}

- (UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    // Return the view that you want to zoom
    return self.imageView;
}

- (void)scrollViewDidZoom:(UIScrollView *)scrollView {
    // The scroll view has zoomed, so you need to re-center the contents
    [self centerScrollViewContents];
}

- (void)viewDidLoad {
    [super viewDidLoad];

    // 1
    UIImage *image = [UIImage imageNamed:@"map_route1.png"];
    self.imageView = [[UIImageView alloc] initWithImage:image];
    self.imageView.frame = (CGRect){.origin=CGPointMake(0.0f, 0.0f), .size=image.size};
    [self.scrollView addSubview:self.imageView];

    // 2
    self.scrollView.contentSize = image.size;

    // 3
    UITapGestureRecognizer *doubleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(scrollViewDoubleTapped:)];
    doubleTapRecognizer.numberOfTapsRequired = 2;
    doubleTapRecognizer.numberOfTouchesRequired = 1;
    [self.scrollView addGestureRecognizer:doubleTapRecognizer];

    UITapGestureRecognizer *twoFingerTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(scrollViewTwoFingerTapped:)];
    twoFingerTapRecognizer.numberOfTapsRequired = 1;
    twoFingerTapRecognizer.numberOfTouchesRequired = 2;
    [self.scrollView addGestureRecognizer:twoFingerTapRecognizer];
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    // 4
    CGRect scrollViewFrame = self.scrollView.frame;
    CGFloat scaleWidth = scrollViewFrame.size.width / self.scrollView.contentSize.width;
    CGFloat scaleHeight = scrollViewFrame.size.height / self.scrollView.contentSize.height;
    CGFloat minScale = MIN(scaleWidth, scaleHeight);
    self.scrollView.minimumZoomScale = minScale;

    // 5
    self.scrollView.maximumZoomScale = 1.5f;
    self.scrollView.zoomScale = minScale;

    // 6
    [self centerScrollViewContents];
}

    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }

    @end
UIImage *image = [UIImage imageNamed:@"map_route1.png"];